"""it_IT ssn provider (yields italian fiscal codes)"""

import unicodedata

from string import ascii_uppercase, digits

from .. import Provider as SsnProvider

ALPHABET = ascii_uppercase
ALPHANUMERICS = sorted(digits + ascii_uppercase)
ALPHANUMERICS_DICT = {char: index for index, char in enumerate(ALPHANUMERICS)}
MONTHS_LIST = ("A", "B", "C", "D", "E", "H", "L", "M", "P", "R", "S", "T")
VOWELS = "AEIOU"
CONSONANTS = [letter for letter in ALPHABET if letter not in VOWELS]


MUNICIPALITIES_LIST = (
    "A001",
    "A004",
    "A005",
    "A006",
    "A007",
    "A008",
    "A010",
    "A013",
    "A014",
    "A015",
    "A016",
    "A017",
    "A018",
    "A019",
    "A020",
    "A022",
    "A023",
    "A024",
    "A025",
    "A026",
    "A027",
    "A028",
    "A029",
    "A032",
    "A033",
    "A034",
    "A035",
    "A038",
    "A039",
    "A040",
    "A041",
    "A043",
    "A044",
    "A045",
    "A047",
    "A048",
    "A049",
    "A050",
    "A051",
    "A052",
    "A053",
    "A054",
    "A055",
    "A056",
    "A057",
    "A058",
    "A059",
    "A060",
    "A061",
    "A062",
    "A064",
    "A065",
    "A067",
    "A068",
    "A069",
    "A070",
    "A071",
    "A072",
    "A074",
    "A075",
    "A076",
    "A077",
    "A080",
    "A081",
    "A082",
    "A083",
    "A084",
    "A085",
    "A087",
    "A088",
    "A089",
    "A091",
    "A092",
    "A093",
    "A094",
    "A096",
    "A097",
    "A098",
    "A100",
    "A101",
    "A102",
    "A103",
    "A105",
    "A106",
    "A107",
    "A108",
    "A109",
    "A110",
    "A111",
    "A112",
    "A113",
    "A115",
    "A116",
    "A117",
    "A118",
    "A119",
    "A120",
    "A121",
    "A122",
    "A123",
    "A124",
    "A125",
    "A126",
    "A127",
    "A128",
    "A129",
    "A130",
    "A131",
    "A132",
    "A134",
    "A135",
    "A137",
    "A138",
    "A139",
    "A143",
    "A145",
    "A146",
    "A149",
    "A150",
    "A153",
    "A154",
    "A155",
    "A157",
    "A158",
    "A159",
    "A160",
    "A161",
    "A162",
    "A163",
    "A164",
    "A165",
    "A166",
    "A167",
    "A171",
    "A172",
    "A173",
    "A175",
    "A176",
    "A177",
    "A178",
    "A179",
    "A180",
    "A181",
    "A182",
    "A183",
    "A184",
    "A185",
    "A186",
    "A187",
    "A188",
    "A189",
    "A191",
    "A192",
    "A193",
    "A194",
    "A195",
    "A196",
    "A197",
    "A198",
    "A200",
    "A201",
    "A202",
    "A203",
    "A204",
    "A205",
    "A206",
    "A207",
    "A208",
    "A210",
    "A214",
    "A215",
    "A216",
    "A217",
    "A218",
    "A220",
    "A221",
    "A222",
    "A223",
    "A224",
    "A225",
    "A226",
    "A227",
    "A228",
    "A229",
    "A230",
    "A231",
    "A233",
    "A234",
    "A235",
    "A236",
    "A237",
    "A238",
    "A239",
    "A240",
    "A241",
    "A242",
    "A243",
    "A244",
    "A245",
    "A246",
    "A249",
    "A251",
    "A252",
    "A253",
    "A254",
    "A255",
    "A256",
    "A257",
    "A258",
    "A259",
    "A261",
    "A262",
    "A263",
    "A264",
    "A265",
    "A266",
    "A267",
    "A268",
    "A269",
    "A270",
    "A271",
    "A272",
    "A273",
    "A274",
    "A275",
    "A278",
    "A280",
    "A281",
    "A282",
    "A283",
    "A284",
    "A285",
    "A286",
    "A287",
    "A288",
    "A290",
    "A291",
    "A292",
    "A293",
    "A294",
    "A295",
    "A296",
    "A297",
    "A299",
    "A300",
    "A301",
    "A302",
    "A303",
    "A304",
    "A305",
    "A306",
    "A308",
    "A309",
    "A310",
    "A312",
    "A313",
    "A314",
    "A315",
    "A317",
    "A318",
    "A319",
    "A320",
    "A321",
    "A323",
    "A324",
    "A325",
    "A326",
    "A327",
    "A328",
    "A329",
    "A330",
    "A332",
    "A333",
    "A334",
    "A335",
    "A337",
    "A338",
    "A339",
    "A340",
    "A341",
    "A343",
    "A344",
    "A345",
    "A346",
    "A347",
    "A348",
    "A350",
    "A351",
    "A352",
    "A354",
    "A355",
    "A357",
    "A358",
    "A359",
    "A360",
    "A363",
    "A365",
    "A366",
    "A367",
    "A368",
    "A369",
    "A370",
    "A371",
    "A372",
    "A373",
    "A374",
    "A375",
    "A376",
    "A377",
    "A379",
    "A380",
    "A382",
    "A383",
    "A385",
    "A386",
    "A387",
    "A388",
    "A389",
    "A390",
    "A391",
    "A392",
    "A393",
    "A394",
    "A396",
    "A397",
    "A398",
    "A399",
    "A400",
    "A401",
    "A402",
    "A403",
    "A405",
    "A407",
    "A409",
    "A412",
    "A413",
    "A414",
    "A415",
    "A418",
    "A419",
    "A421",
    "A422",
    "A424",
    "A425",
    "A427",
    "A429",
    "A430",
    "A431",
    "A432",
    "A433",
    "A434",
    "A435",
    "A436",
    "A437",
    "A438",
    "A439",
    "A440",
    "A441",
    "A443",
    "A444",
    "A445",
    "A446",
    "A447",
    "A448",
    "A449",
    "A451",
    "A452",
    "A453",
    "A454",
    "A455",
    "A458",
    "A459",
    "A460",
    "A461",
    "A462",
    "A463",
    "A464",
    "A465",
    "A466",
    "A467",
    "A468",
    "A470",
    "A471",
    "A472",
    "A473",
    "A474",
    "A475",
    "A476",
    "A477",
    "A478",
    "A479",
    "A480",
    "A481",
    "A482",
    "A484",
    "A485",
    "A486",
    "A487",
    "A488",
    "A489",
    "A490",
    "A491",
    "A492",
    "A494",
    "A495",
    "A496",
    "A497",
    "A499",
    "A501",
    "A502",
    "A503",
    "A506",
    "A507",
    "A508",
    "A509",
    "A511",
    "A512",
    "A514",
    "A515",
    "A516",
    "A517",
    "A518",
    "A519",
    "A520",
    "A521",
    "A522",
    "A523",
    "A525",
    "A526",
    "A527",
    "A528",
    "A529",
    "A530",
    "A531",
    "A532",
    "A533",
    "A534",
    "A535",
    "A536",
    "A537",
    "A538",
    "A539",
    "A540",
    "A541",
    "A542",
    "A544",
    "A546",
    "A547",
    "A550",
    "A551",
    "A552",
    "A553",
    "A555",
    "A557",
    "A560",
    "A561",
    "A562",
    "A564",
    "A565",
    "A566",
    "A567",
    "A568",
    "A569",
    "A570",
    "A571",
    "A572",
    "A573",
    "A574",
    "A575",
    "A576",
    "A577",
    "A578",
    "A579",
    "A580",
    "A581",
    "A584",
    "A586",
    "A587",
    "A588",
    "A589",
    "A590",
    "A591",
    "A592",
    "A593",
    "A594",
    "A597",
    "A599",
    "A600",
    "A601",
    "A603",
    "A604",
    "A605",
    "A606",
    "A607",
    "A609",
    "A610",
    "A612",
    "A613",
    "A614",
    "A615",
    "A616",
    "A617",
    "A618",
    "A619",
    "A621",
    "A625",
    "A626",
    "A628",
    "A629",
    "A630",
    "A631",
    "A632",
    "A634",
    "A635",
    "A637",
    "A638",
    "A640",
    "A643",
    "A645",
    "A646",
    "A647",
    "A650",
    "A651",
    "A652",
    "A653",
    "A655",
    "A656",
    "A657",
    "A658",
    "A660",
    "A661",
    "A662",
    "A663",
    "A664",
    "A665",
    "A666",
    "A667",
    "A668",
    "A669",
    "A670",
    "A671",
    "A673",
    "A674",
    "A676",
    "A677",
    "A678",
    "A681",
    "A683",
    "A684",
    "A686",
    "A687",
    "A689",
    "A690",
    "A691",
    "A692",
    "A694",
    "A696",
    "A697",
    "A698",
    "A699",
    "A700",
    "A701",
    "A702",
    "A703",
    "A704",
    "A705",
    "A706",
    "A707",
    "A708",
    "A709",
    "A710",
    "A712",
    "A713",
    "A714",
    "A716",
    "A717",
    "A718",
    "A719",
    "A720",
    "A721",
    "A722",
    "A725",
    "A728",
    "A729",
    "A730",
    "A731",
    "A732",
    "A733",
    "A734",
    "A735",
    "A736",
    "A737",
    "A738",
    "A739",
    "A740",
    "A741",
    "A742",
    "A743",
    "A745",
    "A746",
    "A747",
    "A749",
    "A750",
    "A751",
    "A752",
    "A755",
    "A756",
    "A757",
    "A759",
    "A760",
    "A761",
    "A762",
    "A763",
    "A764",
    "A765",
    "A766",
    "A768",
    "A769",
    "A770",
    "A771",
    "A772",
    "A773",
    "A774",
    "A776",
    "A777",
    "A778",
    "A779",
    "A780",
    "A781",
    "A782",
    "A783",
    "A784",
    "A785",
    "A786",
    "A787",
    "A788",
    "A789",
    "A791",
    "A792",
    "A793",
    "A794",
    "A795",
    "A796",
    "A798",
    "A799",
    "A801",
    "A802",
    "A804",
    "A805",
    "A809",
    "A810",
    "A811",
    "A812",
    "A813",
    "A815",
    "A816",
    "A817",
    "A818",
    "A819",
    "A820",
    "A821",
    "A823",
    "A825",
    "A826",
    "A827",
    "A831",
    "A832",
    "A834",
    "A835",
    "A836",
    "A837",
    "A841",
    "A842",
    "A843",
    "A844",
    "A845",
    "A846",
    "A847",
    "A848",
    "A849",
    "A850",
    "A851",
    "A852",
    "A853",
    "A854",
    "A855",
    "A856",
    "A857",
    "A859",
    "A861",
    "A863",
    "A864",
    "A870",
    "A872",
    "A874",
    "A876",
    "A877",
    "A878",
    "A880",
    "A881",
    "A882",
    "A883",
    "A884",
    "A885",
    "A887",
    "A889",
    "A891",
    "A892",
    "A893",
    "A894",
    "A895",
    "A896",
    "A897",
    "A898",
    "A902",
    "A903",
    "A904",
    "A905",
    "A906",
    "A909",
    "A910",
    "A911",
    "A912",
    "A914",
    "A916",
    "A918",
    "A919",
    "A920",
    "A922",
    "A925",
    "A929",
    "A930",
    "A931",
    "A932",
    "A937",
    "A940",
    "A941",
    "A942",
    "A944",
    "A945",
    "A946",
    "A947",
    "A948",
    "A949",
    "A950",
    "A952",
    "A953",
    "A954",
    "A955",
    "A956",
    "A957",
    "A958",
    "A959",
    "A960",
    "A961",
    "A962",
    "A963",
    "A964",
    "A965",
    "A968",
    "A970",
    "A971",
    "A972",
    "A973",
    "A975",
    "A976",
    "A977",
    "A978",
    "A979",
    "A981",
    "A982",
    "A983",
    "A984",
    "A986",
    "A987",
    "A988",
    "A989",
    "A990",
    "A991",
    "A992",
    "A993",
    "A995",
    "A996",
    "A998",
    "A999",
    "B001",
    "B002",
    "B003",
    "B005",
    "B006",
    "B007",
    "B008",
    "B009",
    "B010",
    "B012",
    "B014",
    "B015",
    "B016",
    "B017",
    "B018",
    "B019",
    "B020",
    "B021",
    "B024",
    "B025",
    "B026",
    "B028",
    "B029",
    "B030",
    "B031",
    "B033",
    "B034",
    "B035",
    "B036",
    "B037",
    "B038",
    "B040",
    "B041",
    "B042",
    "B043",
    "B044",
    "B046",
    "B048",
    "B049",
    "B051",
    "B054",
    "B055",
    "B056",
    "B057",
    "B058",
    "B061",
    "B062",
    "B063",
    "B064",
    "B067",
    "B068",
    "B069",
    "B070",
    "B071",
    "B073",
    "B075",
    "B076",
    "B077",
    "B079",
    "B080",
    "B081",
    "B082",
    "B083",
    "B084",
    "B085",
    "B086",
    "B088",
    "B091",
    "B094",
    "B097",
    "B098",
    "B099",
    "B100",
    "B101",
    "B102",
    "B104",
    "B105",
    "B106",
    "B107",
    "B109",
    "B110",
    "B111",
    "B112",
    "B114",
    "B115",
    "B116",
    "B117",
    "B118",
    "B120",
    "B121",
    "B123",
    "B124",
    "B126",
    "B128",
    "B129",
    "B131",
    "B132",
    "B134",
    "B137",
    "B138",
    "B141",
    "B142",
    "B143",
    "B144",
    "B145",
    "B149",
    "B150",
    "B152",
    "B153",
    "B154",
    "B156",
    "B157",
    "B158",
    "B159",
    "B160",
    "B161",
    "B162",
    "B166",
    "B167",
    "B169",
    "B171",
    "B172",
    "B173",
    "B175",
    "B176",
    "B178",
    "B179",
    "B180",
    "B181",
    "B182",
    "B183",
    "B184",
    "B187",
    "B188",
    "B191",
    "B192",
    "B193",
    "B194",
    "B195",
    "B196",
    "B197",
    "B198",
    "B200",
    "B201",
    "B202",
    "B203",
    "B204",
    "B205",
    "B207",
    "B209",
    "B212",
    "B213",
    "B214",
    "B215",
    "B216",
    "B217",
    "B218",
    "B219",
    "B220",
    "B221",
    "B223",
    "B225",
    "B227",
    "B228",
    "B229",
    "B230",
    "B232",
    "B234",
    "B235",
    "B236",
    "B237",
    "B238",
    "B239",
    "B240",
    "B242",
    "B243",
    "B246",
    "B247",
    "B248",
    "B249",
    "B250",
    "B251",
    "B255",
    "B256",
    "B258",
    "B259",
    "B261",
    "B262",
    "B264",
    "B265",
    "B266",
    "B267",
    "B268",
    "B269",
    "B270",
    "B272",
    "B274",
    "B275",
    "B276",
    "B278",
    "B279",
    "B280",
    "B281",
    "B282",
    "B284",
    "B285",
    "B286",
    "B287",
    "B288",
    "B289",
    "B292",
    "B293",
    "B294",
    "B295",
    "B296",
    "B297",
    "B300",
    "B301",
    "B302",
    "B303",
    "B304",
    "B305",
    "B306",
    "B309",
    "B310",
    "B311",
    "B312",
    "B313",
    "B314",
    "B315",
    "B317",
    "B319",
    "B326",
    "B328",
    "B332",
    "B335",
    "B345",
    "B346",
    "B349",
    "B350",
    "B351",
    "B352",
    "B354",
    "B355",
    "B357",
    "B358",
    "B361",
    "B362",
    "B364",
    "B365",
    "B366",
    "B367",
    "B368",
    "B369",
    "B371",
    "B374",
    "B375",
    "B376",
    "B377",
    "B378",
    "B379",
    "B380",
    "B381",
    "B382",
    "B383",
    "B384",
    "B385",
    "B387",
    "B388",
    "B389",
    "B390",
    "B391",
    "B392",
    "B393",
    "B394",
    "B395",
    "B396",
    "B397",
    "B398",
    "B399",
    "B400",
    "B402",
    "B403",
    "B404",
    "B405",
    "B406",
    "B408",
    "B409",
    "B410",
    "B413",
    "B415",
    "B416",
    "B417",
    "B418",
    "B419",
    "B423",
    "B424",
    "B425",
    "B426",
    "B427",
    "B428",
    "B429",
    "B430",
    "B431",
    "B432",
    "B433",
    "B434",
    "B435",
    "B436",
    "B437",
    "B439",
    "B440",
    "B441",
    "B442",
    "B443",
    "B444",
    "B445",
    "B446",
    "B447",
    "B448",
    "B450",
    "B452",
    "B453",
    "B455",
    "B457",
    "B460",
    "B461",
    "B462",
    "B463",
    "B465",
    "B466",
    "B467",
    "B468",
    "B469",
    "B470",
    "B471",
    "B472",
    "B473",
    "B474",
    "B476",
    "B477",
    "B481",
    "B482",
    "B483",
    "B484",
    "B485",
    "B486",
    "B490",
    "B491",
    "B492",
    "B493",
    "B494",
    "B496",
    "B497",
    "B498",
    "B499",
    "B500",
    "B501",
    "B502",
    "B504",
    "B505",
    "B506",
    "B507",
    "B509",
    "B510",
    "B511",
    "B512",
    "B513",
    "B514",
    "B515",
    "B516",
    "B519",
    "B520",
    "B521",
    "B522",
    "B524",
    "B525",
    "B526",
    "B527",
    "B528",
    "B529",
    "B530",
    "B531",
    "B532",
    "B533",
    "B534",
    "B535",
    "B536",
    "B537",
    "B538",
    "B539",
    "B540",
    "B541",
    "B542",
    "B543",
    "B544",
    "B546",
    "B549",
    "B550",
    "B551",
    "B553",
    "B554",
    "B555",
    "B556",
    "B557",
    "B559",
    "B561",
    "B562",
    "B563",
    "B564",
    "B565",
    "B566",
    "B567",
    "B569",
    "B570",
    "B572",
    "B573",
    "B574",
    "B576",
    "B577",
    "B578",
    "B579",
    "B580",
    "B581",
    "B582",
    "B584",
    "B586",
    "B587",
    "B588",
    "B589",
    "B590",
    "B591",
    "B592",
    "B593",
    "B594",
    "B595",
    "B597",
    "B598",
    "B602",
    "B603",
    "B604",
    "B605",
    "B606",
    "B607",
    "B608",
    "B609",
    "B610",
    "B612",
    "B613",
    "B615",
    "B616",
    "B617",
    "B618",
    "B619",
    "B620",
    "B621",
    "B624",
    "B626",
    "B627",
    "B628",
    "B629",
    "B630",
    "B631",
    "B632",
    "B633",
    "B634",
    "B635",
    "B636",
    "B637",
    "B639",
    "B640",
    "B641",
    "B642",
    "B643",
    "B644",
    "B645",
    "B646",
    "B647",
    "B648",
    "B649",
    "B650",
    "B651",
    "B653",
    "B655",
    "B656",
    "B658",
    "B660",
    "B661",
    "B662",
    "B663",
    "B664",
    "B666",
    "B667",
    "B669",
    "B670",
    "B671",
    "B672",
    "B674",
    "B675",
    "B676",
    "B677",
    "B678",
    "B679",
    "B680",
    "B681",
    "B682",
    "B684",
    "B685",
    "B686",
    "B687",
    "B688",
    "B689",
    "B690",
    "B691",
    "B692",
    "B693",
    "B694",
    "B695",
    "B696",
    "B697",
    "B698",
    "B701",
    "B703",
    "B704",
    "B705",
    "B706",
    "B707",
    "B708",
    "B709",
    "B710",
    "B711",
    "B712",
    "B715",
    "B716",
    "B717",
    "B718",
    "B719",
    "B720",
    "B722",
    "B724",
    "B725",
    "B726",
    "B727",
    "B729",
    "B730",
    "B731",
    "B732",
    "B733",
    "B734",
    "B735",
    "B736",
    "B738",
    "B740",
    "B741",
    "B742",
    "B743",
    "B744",
    "B745",
    "B748",
    "B749",
    "B752",
    "B754",
    "B755",
    "B756",
    "B758",
    "B759",
    "B760",
    "B762",
    "B763",
    "B765",
    "B766",
    "B767",
    "B768",
    "B769",
    "B771",
    "B772",
    "B774",
    "B776",
    "B777",
    "B778",
    "B779",
    "B780",
    "B781",
    "B782",
    "B783",
    "B784",
    "B785",
    "B787",
    "B788",
    "B789",
    "B790",
    "B791",
    "B792",
    "B794",
    "B795",
    "B796",
    "B798",
    "B799",
    "B801",
    "B802",
    "B803",
    "B804",
    "B805",
    "B807",
    "B808",
    "B809",
    "B810",
    "B812",
    "B813",
    "B816",
    "B817",
    "B818",
    "B819",
    "B820",
    "B822",
    "B823",
    "B824",
    "B825",
    "B826",
    "B827",
    "B828",
    "B829",
    "B830",
    "B832",
    "B835",
    "B836",
    "B838",
    "B839",
    "B840",
    "B841",
    "B842",
    "B844",
    "B845",
    "B846",
    "B847",
    "B848",
    "B850",
    "B851",
    "B853",
    "B854",
    "B856",
    "B857",
    "B858",
    "B859",
    "B860",
    "B861",
    "B862",
    "B864",
    "B865",
    "B866",
    "B867",
    "B868",
    "B869",
    "B870",
    "B871",
    "B872",
    "B873",
    "B875",
    "B876",
    "B877",
    "B878",
    "B879",
    "B880",
    "B881",
    "B882",
    "B883",
    "B885",
    "B886",
    "B887",
    "B888",
    "B889",
    "B890",
    "B891",
    "B892",
    "B893",
    "B894",
    "B895",
    "B896",
    "B897",
    "B898",
    "B899",
    "B900",
    "B901",
    "B902",
    "B903",
    "B904",
    "B905",
    "B906",
    "B907",
    "B910",
    "B911",
    "B912",
    "B914",
    "B915",
    "B916",
    "B917",
    "B918",
    "B919",
    "B920",
    "B921",
    "B922",
    "B923",
    "B924",
    "B925",
    "B927",
    "B928",
    "B929",
    "B932",
    "B933",
    "B934",
    "B935",
    "B936",
    "B937",
    "B938",
    "B939",
    "B940",
    "B941",
    "B943",
    "B945",
    "B946",
    "B947",
    "B948",
    "B949",
    "B950",
    "B952",
    "B953",
    "B954",
    "B955",
    "B956",
    "B958",
    "B959",
    "B960",
    "B961",
    "B962",
    "B963",
    "B965",
    "B966",
    "B967",
    "B968",
    "B969",
    "B971",
    "B974",
    "B977",
    "B978",
    "B979",
    "B980",
    "B982",
    "B984",
    "B985",
    "B987",
    "B988",
    "B989",
    "B990",
    "B991",
    "B993",
    "B994",
    "B996",
    "B997",
    "B998",
    "B999",
    "C002",
    "C003",
    "C004",
    "C006",
    "C007",
    "C013",
    "C014",
    "C020",
    "C022",
    "C024",
    "C027",
    "C030",
    "C033",
    "C034",
    "C037",
    "C038",
    "C040",
    "C041",
    "C044",
    "C045",
    "C046",
    "C047",
    "C048",
    "C049",
    "C050",
    "C051",
    "C052",
    "C053",
    "C055",
    "C056",
    "C057",
    "C058",
    "C059",
    "C060",
    "C062",
    "C063",
    "C064",
    "C065",
    "C066",
    "C067",
    "C069",
    "C070",
    "C072",
    "C073",
    "C074",
    "C075",
    "C076",
    "C078",
    "C079",
    "C080",
    "C081",
    "C082",
    "C083",
    "C085",
    "C086",
    "C089",
    "C090",
    "C091",
    "C093",
    "C094",
    "C096",
    "C097",
    "C098",
    "C100",
    "C101",
    "C102",
    "C104",
    "C105",
    "C106",
    "C107",
    "C108",
    "C110",
    "C111",
    "C113",
    "C114",
    "C115",
    "C116",
    "C117",
    "C118",
    "C119",
    "C120",
    "C121",
    "C122",
    "C123",
    "C125",
    "C126",
    "C127",
    "C128",
    "C129",
    "C130",
    "C133",
    "C134",
    "C135",
    "C136",
    "C137",
    "C139",
    "C141",
    "C142",
    "C143",
    "C145",
    "C147",
    "C148",
    "C149",
    "C152",
    "C153",
    "C154",
    "C155",
    "C156",
    "C157",
    "C158",
    "C160",
    "C161",
    "C162",
    "C165",
    "C166",
    "C167",
    "C169",
    "C172",
    "C173",
    "C174",
    "C175",
    "C176",
    "C177",
    "C178",
    "C181",
    "C183",
    "C184",
    "C185",
    "C186",
    "C187",
    "C188",
    "C189",
    "C190",
    "C194",
    "C195",
    "C197",
    "C198",
    "C199",
    "C200",
    "C201",
    "C202",
    "C203",
    "C204",
    "C205",
    "C206",
    "C207",
    "C208",
    "C209",
    "C210",
    "C211",
    "C213",
    "C214",
    "C215",
    "C216",
    "C217",
    "C218",
    "C219",
    "C220",
    "C222",
    "C223",
    "C224",
    "C225",
    "C226",
    "C227",
    "C228",
    "C229",
    "C230",
    "C231",
    "C232",
    "C235",
    "C236",
    "C237",
    "C240",
    "C241",
    "C242",
    "C243",
    "C244",
    "C245",
    "C246",
    "C247",
    "C248",
    "C250",
    "C251",
    "C252",
    "C253",
    "C254",
    "C255",
    "C259",
    "C261",
    "C262",
    "C263",
    "C265",
    "C266",
    "C267",
    "C268",
    "C269",
    "C270",
    "C271",
    "C272",
    "C273",
    "C274",
    "C275",
    "C276",
    "C278",
    "C279",
    "C280",
    "C282",
    "C283",
    "C284",
    "C285",
    "C286",
    "C287",
    "C288",
    "C289",
    "C290",
    "C291",
    "C292",
    "C293",
    "C294",
    "C296",
    "C297",
    "C298",
    "C300",
    "C301",
    "C302",
    "C303",
    "C304",
    "C306",
    "C307",
    "C308",
    "C309",
    "C310",
    "C311",
    "C312",
    "C313",
    "C314",
    "C315",
    "C316",
    "C317",
    "C318",
    "C319",
    "C321",
    "C322",
    "C323",
    "C324",
    "C325",
    "C327",
    "C329",
    "C330",
    "C331",
    "C332",
    "C334",
    "C335",
    "C336",
    "C337",
    "C338",
    "C339",
    "C340",
    "C341",
    "C342",
    "C343",
    "C344",
    "C345",
    "C346",
    "C347",
    "C348",
    "C349",
    "C351",
    "C352",
    "C353",
    "C354",
    "C356",
    "C357",
    "C359",
    "C360",
    "C361",
    "C363",
    "C364",
    "C365",
    "C369",
    "C370",
    "C372",
    "C375",
    "C376",
    "C377",
    "C378",
    "C380",
    "C381",
    "C382",
    "C383",
    "C384",
    "C385",
    "C387",
    "C388",
    "C389",
    "C390",
    "C392",
    "C393",
    "C394",
    "C395",
    "C396",
    "C398",
    "C400",
    "C404",
    "C405",
    "C406",
    "C407",
    "C408",
    "C409",
    "C410",
    "C412",
    "C413",
    "C414",
    "C415",
    "C417",
    "C418",
    "C420",
    "C421",
    "C422",
    "C424",
    "C426",
    "C428",
    "C429",
    "C430",
    "C432",
    "C435",
    "C436",
    "C437",
    "C438",
    "C439",
    "C440",
    "C441",
    "C442",
    "C443",
    "C444",
    "C446",
    "C447",
    "C448",
    "C449",
    "C453",
    "C456",
    "C457",
    "C458",
    "C459",
    "C461",
    "C463",
    "C466",
    "C469",
    "C470",
    "C471",
    "C472",
    "C474",
    "C476",
    "C478",
    "C479",
    "C480",
    "C481",
    "C482",
    "C483",
    "C484",
    "C485",
    "C486",
    "C487",
    "C488",
    "C489",
    "C492",
    "C493",
    "C494",
    "C495",
    "C496",
    "C497",
    "C498",
    "C500",
    "C501",
    "C502",
    "C503",
    "C504",
    "C505",
    "C506",
    "C507",
    "C508",
    "C509",
    "C510",
    "C511",
    "C512",
    "C513",
    "C514",
    "C515",
    "C516",
    "C517",
    "C518",
    "C520",
    "C521",
    "C523",
    "C524",
    "C525",
    "C527",
    "C528",
    "C529",
    "C530",
    "C531",
    "C532",
    "C533",
    "C534",
    "C536",
    "C537",
    "C538",
    "C539",
    "C540",
    "C541",
    "C542",
    "C543",
    "C544",
    "C545",
    "C547",
    "C548",
    "C549",
    "C550",
    "C551",
    "C552",
    "C553",
    "C554",
    "C555",
    "C556",
    "C557",
    "C558",
    "C559",
    "C560",
    "C561",
    "C563",
    "C564",
    "C565",
    "C566",
    "C567",
    "C568",
    "C569",
    "C573",
    "C574",
    "C576",
    "C577",
    "C578",
    "C580",
    "C581",
    "C582",
    "C583",
    "C584",
    "C585",
    "C587",
    "C588",
    "C589",
    "C591",
    "C593",
    "C594",
    "C595",
    "C596",
    "C598",
    "C599",
    "C600",
    "C604",
    "C605",
    "C606",
    "C608",
    "C609",
    "C610",
    "C612",
    "C613",
    "C614",
    "C615",
    "C616",
    "C618",
    "C619",
    "C620",
    "C621",
    "C623",
    "C624",
    "C625",
    "C627",
    "C628",
    "C629",
    "C630",
    "C631",
    "C632",
    "C633",
    "C634",
    "C635",
    "C637",
    "C638",
    "C639",
    "C640",
    "C641",
    "C648",
    "C649",
    "C650",
    "C651",
    "C652",
    "C653",
    "C654",
    "C655",
    "C656",
    "C657",
    "C658",
    "C659",
    "C660",
    "C661",
    "C662",
    "C663",
    "C665",
    "C668",
    "C669",
    "C670",
    "C672",
    "C673",
    "C674",
    "C675",
    "C676",
    "C677",
    "C678",
    "C679",
    "C680",
    "C681",
    "C684",
    "C685",
    "C686",
    "C689",
    "C691",
    "C695",
    "C696",
    "C697",
    "C698",
    "C699",
    "C700",
    "C701",
    "C702",
    "C703",
    "C704",
    "C705",
    "C707",
    "C708",
    "C709",
    "C710",
    "C711",
    "C712",
    "C713",
    "C714",
    "C715",
    "C716",
    "C717",
    "C718",
    "C719",
    "C722",
    "C723",
    "C724",
    "C725",
    "C726",
    "C727",
    "C728",
    "C729",
    "C730",
    "C732",
    "C733",
    "C735",
    "C738",
    "C739",
    "C740",
    "C741",
    "C742",
    "C743",
    "C744",
    "C745",
    "C746",
    "C747",
    "C749",
    "C750",
    "C751",
    "C752",
    "C755",
    "C756",
    "C757",
    "C758",
    "C759",
    "C760",
    "C763",
    "C764",
    "C765",
    "C766",
    "C767",
    "C768",
    "C769",
    "C770",
    "C771",
    "C772",
    "C773",
    "C774",
    "C776",
    "C777",
    "C778",
    "C779",
    "C780",
    "C781",
    "C782",
    "C783",
    "C784",
    "C785",
    "C787",
    "C789",
    "C790",
    "C791",
    "C792",
    "C793",
    "C794",
    "C795",
    "C796",
    "C800",
    "C801",
    "C803",
    "C804",
    "C806",
    "C807",
    "C810",
    "C811",
    "C812",
    "C813",
    "C814",
    "C815",
    "C816",
    "C817",
    "C818",
    "C819",
    "C820",
    "C821",
    "C823",
    "C824",
    "C826",
    "C829",
    "C835",
    "C836",
    "C838",
    "C839",
    "C841",
    "C844",
    "C845",
    "C846",
    "C847",
    "C848",
    "C850",
    "C851",
    "C852",
    "C853",
    "C854",
    "C855",
    "C856",
    "C857",
    "C858",
    "C859",
    "C860",
    "C862",
    "C864",
    "C865",
    "C866",
    "C867",
    "C868",
    "C869",
    "C870",
    "C871",
    "C872",
    "C875",
    "C876",
    "C877",
    "C878",
    "C879",
    "C880",
    "C882",
    "C883",
    "C884",
    "C885",
    "C886",
    "C888",
    "C890",
    "C893",
    "C894",
    "C895",
    "C897",
    "C900",
    "C901",
    "C902",
    "C903",
    "C904",
    "C905",
    "C908",
    "C910",
    "C911",
    "C912",
    "C914",
    "C917",
    "C918",
    "C919",
    "C920",
    "C922",
    "C925",
    "C926",
    "C927",
    "C928",
    "C929",
    "C930",
    "C931",
    "C933",
    "C934",
    "C935",
    "C936",
    "C937",
    "C938",
    "C939",
    "C940",
    "C941",
    "C943",
    "C946",
    "C948",
    "C950",
    "C951",
    "C952",
    "C954",
    "C955",
    "C956",
    "C957",
    "C958",
    "C959",
    "C960",
    "C962",
    "C963",
    "C964",
    "C968",
    "C969",
    "C971",
    "C972",
    "C973",
    "C974",
    "C975",
    "C976",
    "C977",
    "C978",
    "C979",
    "C980",
    "C982",
    "C983",
    "C984",
    "C986",
    "C987",
    "C988",
    "C990",
    "C991",
    "C992",
    "C993",
    "C995",
    "C996",
    "C998",
    "C999",
    "D003",
    "D004",
    "D006",
    "D007",
    "D008",
    "D009",
    "D010",
    "D011",
    "D012",
    "D013",
    "D014",
    "D015",
    "D016",
    "D018",
    "D019",
    "D020",
    "D021",
    "D022",
    "D024",
    "D026",
    "D027",
    "D028",
    "D029",
    "D030",
    "D033",
    "D037",
    "D038",
    "D040",
    "D041",
    "D042",
    "D043",
    "D044",
    "D045",
    "D046",
    "D048",
    "D049",
    "D050",
    "D051",
    "D052",
    "D054",
    "D056",
    "D057",
    "D058",
    "D061",
    "D062",
    "D064",
    "D065",
    "D066",
    "D068",
    "D072",
    "D075",
    "D076",
    "D077",
    "D078",
    "D079",
    "D081",
    "D082",
    "D085",
    "D086",
    "D087",
    "D088",
    "D089",
    "D092",
    "D093",
    "D094",
    "D095",
    "D096",
    "D099",
    "D100",
    "D101",
    "D102",
    "D103",
    "D105",
    "D107",
    "D108",
    "D109",
    "D110",
    "D111",
    "D112",
    "D113",
    "D114",
    "D117",
    "D118",
    "D119",
    "D120",
    "D121",
    "D122",
    "D123",
    "D124",
    "D126",
    "D127",
    "D128",
    "D131",
    "D132",
    "D133",
    "D134",
    "D136",
    "D137",
    "D139",
    "D141",
    "D142",
    "D143",
    "D144",
    "D145",
    "D147",
    "D149",
    "D150",
    "D151",
    "D154",
    "D156",
    "D159",
    "D161",
    "D162",
    "D165",
    "D166",
    "D168",
    "D170",
    "D171",
    "D172",
    "D175",
    "D177",
    "D179",
    "D180",
    "D181",
    "D184",
    "D185",
    "D186",
    "D187",
    "D188",
    "D189",
    "D192",
    "D193",
    "D195",
    "D196",
    "D197",
    "D198",
    "D199",
    "D200",
    "D201",
    "D202",
    "D203",
    "D204",
    "D205",
    "D207",
    "D208",
    "D209",
    "D210",
    "D211",
    "D214",
    "D216",
    "D217",
    "D218",
    "D219",
    "D221",
    "D222",
    "D223",
    "D226",
    "D227",
    "D228",
    "D229",
    "D230",
    "D231",
    "D232",
    "D233",
    "D234",
    "D236",
    "D237",
    "D238",
    "D239",
    "D244",
    "D245",
    "D246",
    "D247",
    "D251",
    "D253",
    "D255",
    "D256",
    "D257",
    "D258",
    "D259",
    "D260",
    "D261",
    "D264",
    "D265",
    "D266",
    "D267",
    "D268",
    "D269",
    "D270",
    "D271",
    "D272",
    "D273",
    "D277",
    "D278",
    "D279",
    "D280",
    "D281",
    "D284",
    "D286",
    "D287",
    "D289",
    "D290",
    "D291",
    "D292",
    "D293",
    "D296",
    "D297",
    "D298",
    "D299",
    "D300",
    "D303",
    "D304",
    "D305",
    "D309",
    "D310",
    "D311",
    "D312",
    "D314",
    "D315",
    "D316",
    "D317",
    "D318",
    "D319",
    "D321",
    "D323",
    "D324",
    "D325",
    "D327",
    "D328",
    "D329",
    "D330",
    "D331",
    "D332",
    "D333",
    "D334",
    "D338",
    "D339",
    "D341",
    "D344",
    "D345",
    "D346",
    "D347",
    "D348",
    "D350",
    "D351",
    "D352",
    "D355",
    "D356",
    "D357",
    "D358",
    "D360",
    "D361",
    "D364",
    "D365",
    "D366",
    "D367",
    "D371",
    "D372",
    "D373",
    "D374",
    "D376",
    "D377",
    "D379",
    "D380",
    "D383",
    "D384",
    "D385",
    "D386",
    "D388",
    "D390",
    "D391",
    "D392",
    "D394",
    "D395",
    "D398",
    "D399",
    "D401",
    "D402",
    "D403",
    "D406",
    "D407",
    "D408",
    "D410",
    "D411",
    "D412",
    "D414",
    "D415",
    "D416",
    "D419",
    "D420",
    "D421",
    "D422",
    "D423",
    "D424",
    "D426",
    "D428",
    "D429",
    "D430",
    "D431",
    "D433",
    "D434",
    "D436",
    "D440",
    "D441",
    "D442",
    "D443",
    "D444",
    "D445",
    "D447",
    "D450",
    "D451",
    "D452",
    "D453",
    "D454",
    "D455",
    "D456",
    "D458",
    "D459",
    "D461",
    "D462",
    "D463",
    "D464",
    "D465",
    "D467",
    "D468",
    "D469",
    "D470",
    "D471",
    "D472",
    "D473",
    "D474",
    "D475",
    "D476",
    "D477",
    "D480",
    "D482",
    "D483",
    "D484",
    "D486",
    "D487",
    "D488",
    "D489",
    "D490",
    "D491",
    "D492",
    "D493",
    "D494",
    "D495",
    "D496",
    "D497",
    "D499",
    "D501",
    "D502",
    "D503",
    "D504",
    "D505",
    "D508",
    "D509",
    "D510",
    "D511",
    "D512",
    "D513",
    "D514",
    "D518",
    "D520",
    "D522",
    "D523",
    "D524",
    "D526",
    "D527",
    "D528",
    "D530",
    "D531",
    "D532",
    "D537",
    "D538",
    "D539",
    "D540",
    "D541",
    "D542",
    "D543",
    "D544",
    "D545",
    "D546",
    "D547",
    "D548",
    "D549",
    "D550",
    "D551",
    "D552",
    "D553",
    "D554",
    "D555",
    "D557",
    "D559",
    "D560",
    "D561",
    "D562",
    "D564",
    "D565",
    "D566",
    "D567",
    "D568",
    "D569",
    "D570",
    "D571",
    "D573",
    "D574",
    "D575",
    "D576",
    "D577",
    "D578",
    "D579",
    "D582",
    "D585",
    "D586",
    "D587",
    "D588",
    "D589",
    "D590",
    "D591",
    "D592",
    "D593",
    "D594",
    "D595",
    "D596",
    "D597",
    "D599",
    "D600",
    "D604",
    "D605",
    "D606",
    "D607",
    "D608",
    "D611",
    "D612",
    "D613",
    "D614",
    "D615",
    "D617",
    "D619",
    "D621",
    "D622",
    "D623",
    "D624",
    "D628",
    "D629",
    "D630",
    "D634",
    "D635",
    "D636",
    "D637",
    "D638",
    "D639",
    "D640",
    "D641",
    "D643",
    "D644",
    "D645",
    "D646",
    "D649",
    "D650",
    "D651",
    "D652",
    "D653",
    "D654",
    "D655",
    "D656",
    "D660",
    "D661",
    "D662",
    "D665",
    "D666",
    "D667",
    "D668",
    "D670",
    "D671",
    "D672",
    "D673",
    "D674",
    "D675",
    "D676",
    "D677",
    "D678",
    "D679",
    "D680",
    "D681",
    "D682",
    "D683",
    "D684",
    "D685",
    "D686",
    "D688",
    "D689",
    "D690",
    "D691",
    "D693",
    "D694",
    "D695",
    "D696",
    "D697",
    "D700",
    "D701",
    "D702",
    "D703",
    "D704",
    "D705",
    "D706",
    "D707",
    "D708",
    "D709",
    "D710",
    "D711",
    "D712",
    "D714",
    "D715",
    "D717",
    "D718",
    "D719",
    "D720",
    "D725",
    "D727",
    "D728",
    "D730",
    "D731",
    "D732",
    "D733",
    "D734",
    "D735",
    "D736",
    "D737",
    "D738",
    "D740",
    "D741",
    "D742",
    "D744",
    "D745",
    "D746",
    "D748",
    "D749",
    "D750",
    "D751",
    "D752",
    "D754",
    "D755",
    "D756",
    "D757",
    "D758",
    "D759",
    "D760",
    "D761",
    "D762",
    "D763",
    "D764",
    "D765",
    "D766",
    "D767",
    "D768",
    "D769",
    "D770",
    "D771",
    "D773",
    "D774",
    "D775",
    "D776",
    "D777",
    "D780",
    "D781",
    "D782",
    "D783",
    "D784",
    "D785",
    "D786",
    "D787",
    "D788",
    "D789",
    "D790",
    "D791",
    "D793",
    "D794",
    "D796",
    "D797",
    "D798",
    "D799",
    "D801",
    "D802",
    "D803",
    "D804",
    "D805",
    "D807",
    "D808",
    "D810",
    "D811",
    "D812",
    "D813",
    "D814",
    "D815",
    "D817",
    "D818",
    "D819",
    "D821",
    "D823",
    "D824",
    "D825",
    "D826",
    "D827",
    "D828",
    "D829",
    "D830",
    "D832",
    "D834",
    "D835",
    "D836",
    "D839",
    "D841",
    "D842",
    "D843",
    "D844",
    "D845",
    "D847",
    "D848",
    "D849",
    "D850",
    "D851",
    "D852",
    "D853",
    "D854",
    "D855",
    "D856",
    "D858",
    "D859",
    "D860",
    "D861",
    "D862",
    "D863",
    "D864",
    "D865",
    "D867",
    "D868",
    "D869",
    "D870",
    "D871",
    "D872",
    "D873",
    "D874",
    "D875",
    "D876",
    "D878",
    "D879",
    "D881",
    "D882",
    "D883",
    "D884",
    "D885",
    "D886",
    "D888",
    "D889",
    "D890",
    "D891",
    "D892",
    "D894",
    "D895",
    "D896",
    "D897",
    "D898",
    "D899",
    "D901",
    "D902",
    "D903",
    "D905",
    "D906",
    "D907",
    "D909",
    "D910",
    "D911",
    "D912",
    "D913",
    "D915",
    "D917",
    "D918",
    "D920",
    "D921",
    "D923",
    "D924",
    "D925",
    "D926",
    "D927",
    "D928",
    "D930",
    "D931",
    "D932",
    "D933",
    "D934",
    "D935",
    "D938",
    "D940",
    "D942",
    "D943",
    "D944",
    "D945",
    "D946",
    "D947",
    "D948",
    "D949",
    "D951",
    "D952",
    "D956",
    "D957",
    "D958",
    "D959",
    "D960",
    "D961",
    "D962",
    "D963",
    "D964",
    "D965",
    "D966",
    "D967",
    "D968",
    "D969",
    "D970",
    "D971",
    "D972",
    "D974",
    "D975",
    "D976",
    "D977",
    "D978",
    "D980",
    "D981",
    "D982",
    "D983",
    "D984",
    "D987",
    "D988",
    "D990",
    "D993",
    "D994",
    "D995",
    "D996",
    "D997",
    "D998",
    "D999",
    "E001",
    "E003",
    "E004",
    "E006",
    "E007",
    "E008",
    "E009",
    "E010",
    "E011",
    "E012",
    "E013",
    "E014",
    "E015",
    "E016",
    "E017",
    "E019",
    "E020",
    "E021",
    "E022",
    "E023",
    "E024",
    "E025",
    "E026",
    "E027",
    "E028",
    "E029",
    "E030",
    "E031",
    "E033",
    "E034",
    "E036",
    "E037",
    "E038",
    "E039",
    "E040",
    "E041",
    "E043",
    "E044",
    "E045",
    "E047",
    "E048",
    "E049",
    "E050",
    "E052",
    "E053",
    "E054",
    "E055",
    "E056",
    "E057",
    "E058",
    "E060",
    "E061",
    "E062",
    "E063",
    "E064",
    "E065",
    "E066",
    "E067",
    "E068",
    "E069",
    "E070",
    "E071",
    "E072",
    "E074",
    "E078",
    "E079",
    "E081",
    "E082",
    "E083",
    "E084",
    "E085",
    "E086",
    "E087",
    "E088",
    "E089",
    "E090",
    "E091",
    "E092",
    "E093",
    "E094",
    "E096",
    "E098",
    "E100",
    "E101",
    "E102",
    "E103",
    "E104",
    "E106",
    "E107",
    "E109",
    "E111",
    "E113",
    "E114",
    "E115",
    "E116",
    "E118",
    "E120",
    "E122",
    "E124",
    "E125",
    "E126",
    "E127",
    "E128",
    "E130",
    "E131",
    "E132",
    "E133",
    "E134",
    "E136",
    "E139",
    "E141",
    "E142",
    "E143",
    "E144",
    "E145",
    "E146",
    "E147",
    "E148",
    "E149",
    "E152",
    "E153",
    "E154",
    "E155",
    "E156",
    "E158",
    "E159",
    "E160",
    "E161",
    "E163",
    "E164",
    "E165",
    "E167",
    "E168",
    "E169",
    "E170",
    "E171",
    "E172",
    "E173",
    "E177",
    "E178",
    "E179",
    "E180",
    "E182",
    "E184",
    "E185",
    "E187",
    "E188",
    "E189",
    "E191",
    "E192",
    "E193",
    "E195",
    "E196",
    "E199",
    "E200",
    "E201",
    "E202",
    "E203",
    "E204",
    "E205",
    "E206",
    "E207",
    "E208",
    "E209",
    "E210",
    "E212",
    "E213",
    "E214",
    "E215",
    "E216",
    "E217",
    "E219",
    "E221",
    "E223",
    "E224",
    "E226",
    "E227",
    "E228",
    "E229",
    "E230",
    "E232",
    "E233",
    "E234",
    "E235",
    "E236",
    "E237",
    "E238",
    "E239",
    "E240",
    "E241",
    "E242",
    "E243",
    "E244",
    "E245",
    "E246",
    "E248",
    "E249",
    "E250",
    "E251",
    "E252",
    "E253",
    "E255",
    "E256",
    "E258",
    "E259",
    "E261",
    "E263",
    "E264",
    "E265",
    "E266",
    "E269",
    "E270",
    "E271",
    "E272",
    "E273",
    "E274",
    "E280",
    "E281",
    "E282",
    "E283",
    "E284",
    "E285",
    "E287",
    "E288",
    "E289",
    "E290",
    "E291",
    "E292",
    "E295",
    "E297",
    "E299",
    "E301",
    "E304",
    "E305",
    "E306",
    "E307",
    "E309",
    "E310",
    "E311",
    "E313",
    "E314",
    "E317",
    "E320",
    "E321",
    "E323",
    "E325",
    "E326",
    "E327",
    "E328",
    "E329",
    "E330",
    "E332",
    "E333",
    "E334",
    "E335",
    "E336",
    "E337",
    "E338",
    "E339",
    "E340",
    "E341",
    "E342",
    "E343",
    "E345",
    "E346",
    "E348",
    "E349",
    "E350",
    "E351",
    "E353",
    "E354",
    "E356",
    "E358",
    "E360",
    "E363",
    "E364",
    "E365",
    "E366",
    "E367",
    "E368",
    "E369",
    "E370",
    "E371",
    "E372",
    "E373",
    "E374",
    "E375",
    "E376",
    "E377",
    "E379",
    "E380",
    "E381",
    "E382",
    "E386",
    "E387",
    "E388",
    "E389",
    "E390",
    "E391",
    "E392",
    "E393",
    "E394",
    "E395",
    "E396",
    "E397",
    "E398",
    "E400",
    "E401",
    "E402",
    "E403",
    "E405",
    "E406",
    "E407",
    "E409",
    "E410",
    "E412",
    "E413",
    "E414",
    "E415",
    "E416",
    "E417",
    "E419",
    "E420",
    "E421",
    "E422",
    "E423",
    "E424",
    "E425",
    "E426",
    "E428",
    "E429",
    "E430",
    "E431",
    "E432",
    "E433",
    "E434",
    "E435",
    "E436",
    "E437",
    "E438",
    "E439",
    "E441",
    "E443",
    "E445",
    "E447",
    "E448",
    "E450",
    "E451",
    "E454",
    "E456",
    "E457",
    "E458",
    "E459",
    "E462",
    "E463",
    "E464",
    "E465",
    "E466",
    "E467",
    "E469",
    "E470",
    "E471",
    "E472",
    "E473",
    "E474",
    "E475",
    "E476",
    "E479",
    "E480",
    "E481",
    "E482",
    "E483",
    "E484",
    "E485",
    "E486",
    "E487",
    "E488",
    "E489",
    "E490",
    "E491",
    "E492",
    "E493",
    "E494",
    "E496",
    "E497",
    "E498",
    "E500",
    "E502",
    "E504",
    "E505",
    "E506",
    "E507",
    "E509",
    "E510",
    "E512",
    "E514",
    "E515",
    "E517",
    "E518",
    "E519",
    "E520",
    "E522",
    "E523",
    "E524",
    "E526",
    "E527",
    "E528",
    "E530",
    "E531",
    "E532",
    "E535",
    "E536",
    "E537",
    "E538",
    "E539",
    "E540",
    "E541",
    "E542",
    "E543",
    "E544",
    "E546",
    "E547",
    "E548",
    "E549",
    "E550",
    "E551",
    "E553",
    "E554",
    "E555",
    "E557",
    "E558",
    "E559",
    "E560",
    "E562",
    "E563",
    "E564",
    "E565",
    "E566",
    "E569",
    "E570",
    "E571",
    "E573",
    "E574",
    "E576",
    "E578",
    "E581",
    "E583",
    "E584",
    "E587",
    "E588",
    "E589",
    "E590",
    "E591",
    "E592",
    "E593",
    "E594",
    "E596",
    "E597",
    "E599",
    "E600",
    "E602",
    "E605",
    "E606",
    "E607",
    "E608",
    "E610",
    "E611",
    "E613",
    "E615",
    "E617",
    "E618",
    "E620",
    "E621",
    "E622",
    "E623",
    "E624",
    "E625",
    "E626",
    "E627",
    "E629",
    "E630",
    "E632",
    "E633",
    "E635",
    "E638",
    "E639",
    "E640",
    "E644",
    "E645",
    "E646",
    "E647",
    "E648",
    "E649",
    "E651",
    "E652",
    "E654",
    "E655",
    "E656",
    "E659",
    "E660",
    "E661",
    "E662",
    "E664",
    "E665",
    "E666",
    "E668",
    "E669",
    "E671",
    "E673",
    "E674",
    "E675",
    "E677",
    "E678",
    "E679",
    "E680",
    "E681",
    "E682",
    "E683",
    "E684",
    "E685",
    "E687",
    "E689",
    "E690",
    "E691",
    "E692",
    "E693",
    "E694",
    "E695",
    "E698",
    "E700",
    "E704",
    "E705",
    "E706",
    "E707",
    "E708",
    "E709",
    "E711",
    "E713",
    "E714",
    "E715",
    "E716",
    "E718",
    "E719",
    "E722",
    "E723",
    "E724",
    "E726",
    "E729",
    "E730",
    "E731",
    "E734",
    "E735",
    "E736",
    "E737",
    "E738",
    "E742",
    "E743",
    "E745",
    "E746",
    "E747",
    "E748",
    "E749",
    "E750",
    "E751",
    "E752",
    "E753",
    "E754",
    "E757",
    "E758",
    "E759",
    "E760",
    "E761",
    "E763",
    "E764",
    "E767",
    "E769",
    "E770",
    "E772",
    "E773",
    "E777",
    "E778",
    "E779",
    "E780",
    "E782",
    "E783",
    "E784",
    "E785",
    "E786",
    "E787",
    "E788",
    "E789",
    "E790",
    "E791",
    "E793",
    "E794",
    "E795",
    "E798",
    "E799",
    "E800",
    "E801",
    "E803",
    "E804",
    "E805",
    "E806",
    "E807",
    "E808",
    "E809",
    "E810",
    "E811",
    "E812",
    "E813",
    "E814",
    "E815",
    "E816",
    "E817",
    "E818",
    "E819",
    "E820",
    "E821",
    "E825",
    "E829",
    "E830",
    "E833",
    "E834",
    "E835",
    "E836",
    "E837",
    "E838",
    "E839",
    "E840",
    "E841",
    "E842",
    "E843",
    "E844",
    "E847",
    "E848",
    "E850",
    "E851",
    "E852",
    "E853",
    "E854",
    "E855",
    "E856",
    "E858",
    "E859",
    "E860",
    "E862",
    "E863",
    "E864",
    "E865",
    "E868",
    "E869",
    "E870",
    "E872",
    "E873",
    "E874",
    "E875",
    "E876",
    "E877",
    "E878",
    "E879",
    "E880",
    "E882",
    "E883",
    "E884",
    "E885",
    "E887",
    "E888",
    "E889",
    "E891",
    "E892",
    "E893",
    "E894",
    "E896",
    "E897",
    "E899",
    "E900",
    "E901",
    "E902",
    "E903",
    "E904",
    "E905",
    "E906",
    "E907",
    "E908",
    "E910",
    "E911",
    "E912",
    "E914",
    "E915",
    "E917",
    "E919",
    "E921",
    "E922",
    "E923",
    "E924",
    "E925",
    "E927",
    "E928",
    "E929",
    "E930",
    "E931",
    "E932",
    "E933",
    "E934",
    "E936",
    "E938",
    "E939",
    "E940",
    "E941",
    "E944",
    "E945",
    "E946",
    "E947",
    "E949",
    "E951",
    "E952",
    "E953",
    "E954",
    "E955",
    "E956",
    "E957",
    "E958",
    "E959",
    "E960",
    "E961",
    "E962",
    "E963",
    "E965",
    "E967",
    "E968",
    "E970",
    "E971",
    "E972",
    "E973",
    "E974",
    "E975",
    "E976",
    "E977",
    "E978",
    "E979",
    "E980",
    "E981",
    "E982",
    "E983",
    "E984",
    "E986",
    "E987",
    "E988",
    "E989",
    "E990",
    "E991",
    "E992",
    "E993",
    "E994",
    "E995",
    "E997",
    "E998",
    "E999",
    "F001",
    "F002",
    "F003",
    "F004",
    "F005",
    "F006",
    "F007",
    "F009",
    "F010",
    "F011",
    "F012",
    "F013",
    "F015",
    "F016",
    "F017",
    "F020",
    "F021",
    "F022",
    "F023",
    "F024",
    "F025",
    "F027",
    "F028",
    "F029",
    "F030",
    "F032",
    "F033",
    "F035",
    "F037",
    "F041",
    "F042",
    "F043",
    "F044",
    "F045",
    "F046",
    "F047",
    "F048",
    "F050",
    "F051",
    "F052",
    "F053",
    "F054",
    "F055",
    "F058",
    "F059",
    "F061",
    "F063",
    "F064",
    "F065",
    "F066",
    "F067",
    "F068",
    "F070",
    "F073",
    "F074",
    "F078",
    "F080",
    "F081",
    "F082",
    "F083",
    "F084",
    "F085",
    "F086",
    "F087",
    "F088",
    "F089",
    "F092",
    "F093",
    "F095",
    "F096",
    "F097",
    "F098",
    "F100",
    "F101",
    "F102",
    "F104",
    "F105",
    "F106",
    "F107",
    "F108",
    "F109",
    "F110",
    "F111",
    "F112",
    "F113",
    "F114",
    "F115",
    "F116",
    "F117",
    "F118",
    "F119",
    "F120",
    "F122",
    "F123",
    "F125",
    "F126",
    "F127",
    "F130",
    "F131",
    "F132",
    "F133",
    "F134",
    "F135",
    "F136",
    "F137",
    "F138",
    "F139",
    "F140",
    "F141",
    "F144",
    "F145",
    "F146",
    "F147",
    "F148",
    "F149",
    "F151",
    "F152",
    "F153",
    "F154",
    "F155",
    "F156",
    "F157",
    "F158",
    "F161",
    "F162",
    "F165",
    "F167",
    "F168",
    "F170",
    "F171",
    "F172",
    "F173",
    "F175",
    "F176",
    "F182",
    "F183",
    "F184",
    "F186",
    "F187",
    "F188",
    "F189",
    "F190",
    "F191",
    "F192",
    "F193",
    "F194",
    "F196",
    "F200",
    "F201",
    "F202",
    "F203",
    "F205",
    "F206",
    "F207",
    "F208",
    "F209",
    "F210",
    "F213",
    "F214",
    "F216",
    "F217",
    "F218",
    "F219",
    "F220",
    "F221",
    "F223",
    "F224",
    "F225",
    "F226",
    "F229",
    "F230",
    "F231",
    "F232",
    "F233",
    "F238",
    "F239",
    "F240",
    "F241",
    "F242",
    "F243",
    "F244",
    "F246",
    "F247",
    "F248",
    "F249",
    "F250",
    "F251",
    "F254",
    "F256",
    "F257",
    "F258",
    "F259",
    "F260",
    "F261",
    "F262",
    "F263",
    "F265",
    "F266",
    "F267",
    "F268",
    "F269",
    "F270",
    "F271",
    "F272",
    "F274",
    "F275",
    "F276",
    "F277",
    "F278",
    "F279",
    "F280",
    "F281",
    "F283",
    "F284",
    "F287",
    "F288",
    "F290",
    "F293",
    "F294",
    "F295",
    "F297",
    "F299",
    "F301",
    "F304",
    "F305",
    "F307",
    "F308",
    "F309",
    "F310",
    "F311",
    "F312",
    "F313",
    "F315",
    "F316",
    "F317",
    "F318",
    "F319",
    "F320",
    "F322",
    "F323",
    "F324",
    "F325",
    "F326",
    "F327",
    "F328",
    "F329",
    "F330",
    "F332",
    "F333",
    "F335",
    "F336",
    "F337",
    "F338",
    "F340",
    "F342",
    "F343",
    "F346",
    "F347",
    "F348",
    "F351",
    "F352",
    "F354",
    "F355",
    "F356",
    "F357",
    "F358",
    "F359",
    "F360",
    "F361",
    "F363",
    "F364",
    "F365",
    "F367",
    "F368",
    "F369",
    "F370",
    "F371",
    "F372",
    "F373",
    "F374",
    "F375",
    "F376",
    "F377",
    "F378",
    "F379",
    "F380",
    "F381",
    "F382",
    "F383",
    "F384",
    "F385",
    "F386",
    "F387",
    "F390",
    "F391",
    "F392",
    "F393",
    "F394",
    "F395",
    "F397",
    "F398",
    "F399",
    "F400",
    "F401",
    "F403",
    "F404",
    "F405",
    "F407",
    "F408",
    "F409",
    "F410",
    "F411",
    "F414",
    "F415",
    "F416",
    "F417",
    "F419",
    "F420",
    "F422",
    "F423",
    "F424",
    "F426",
    "F427",
    "F428",
    "F429",
    "F430",
    "F432",
    "F433",
    "F434",
    "F437",
    "F440",
    "F441",
    "F442",
    "F443",
    "F445",
    "F446",
    "F448",
    "F449",
    "F450",
    "F452",
    "F453",
    "F454",
    "F455",
    "F456",
    "F457",
    "F458",
    "F460",
    "F461",
    "F462",
    "F463",
    "F464",
    "F465",
    "F467",
    "F468",
    "F469",
    "F471",
    "F473",
    "F475",
    "F477",
    "F478",
    "F479",
    "F480",
    "F481",
    "F482",
    "F483",
    "F484",
    "F486",
    "F487",
    "F488",
    "F489",
    "F491",
    "F492",
    "F493",
    "F494",
    "F495",
    "F496",
    "F497",
    "F498",
    "F499",
    "F500",
    "F501",
    "F502",
    "F503",
    "F504",
    "F506",
    "F507",
    "F508",
    "F509",
    "F510",
    "F511",
    "F512",
    "F513",
    "F514",
    "F515",
    "F516",
    "F517",
    "F518",
    "F519",
    "F520",
    "F522",
    "F523",
    "F524",
    "F526",
    "F527",
    "F528",
    "F529",
    "F531",
    "F532",
    "F533",
    "F534",
    "F535",
    "F536",
    "F537",
    "F538",
    "F540",
    "F541",
    "F542",
    "F543",
    "F544",
    "F545",
    "F546",
    "F547",
    "F548",
    "F549",
    "F550",
    "F551",
    "F552",
    "F553",
    "F556",
    "F557",
    "F558",
    "F559",
    "F560",
    "F561",
    "F562",
    "F563",
    "F564",
    "F565",
    "F566",
    "F567",
    "F568",
    "F569",
    "F570",
    "F572",
    "F573",
    "F574",
    "F576",
    "F578",
    "F579",
    "F580",
    "F581",
    "F582",
    "F585",
    "F586",
    "F587",
    "F589",
    "F590",
    "F591",
    "F592",
    "F594",
    "F595",
    "F596",
    "F597",
    "F598",
    "F599",
    "F600",
    "F601",
    "F603",
    "F604",
    "F605",
    "F606",
    "F607",
    "F608",
    "F609",
    "F610",
    "F611",
    "F612",
    "F614",
    "F616",
    "F618",
    "F619",
    "F620",
    "F621",
    "F622",
    "F623",
    "F625",
    "F626",
    "F627",
    "F628",
    "F629",
    "F631",
    "F632",
    "F634",
    "F636",
    "F637",
    "F638",
    "F639",
    "F640",
    "F642",
    "F644",
    "F646",
    "F648",
    "F651",
    "F653",
    "F654",
    "F655",
    "F656",
    "F657",
    "F660",
    "F661",
    "F662",
    "F664",
    "F665",
    "F666",
    "F667",
    "F668",
    "F669",
    "F670",
    "F671",
    "F672",
    "F674",
    "F675",
    "F676",
    "F677",
    "F679",
    "F680",
    "F681",
    "F682",
    "F685",
    "F686",
    "F687",
    "F688",
    "F689",
    "F690",
    "F692",
    "F696",
    "F697",
    "F698",
    "F701",
    "F703",
    "F704",
    "F705",
    "F706",
    "F707",
    "F708",
    "F709",
    "F710",
    "F711",
    "F712",
    "F713",
    "F715",
    "F716",
    "F717",
    "F718",
    "F720",
    "F721",
    "F722",
    "F723",
    "F724",
    "F725",
    "F726",
    "F727",
    "F728",
    "F729",
    "F730",
    "F731",
    "F732",
    "F733",
    "F734",
    "F735",
    "F736",
    "F737",
    "F738",
    "F739",
    "F740",
    "F743",
    "F744",
    "F745",
    "F746",
    "F747",
    "F748",
    "F749",
    "F750",
    "F751",
    "F754",
    "F756",
    "F758",
    "F760",
    "F761",
    "F762",
    "F764",
    "F765",
    "F766",
    "F767",
    "F770",
    "F771",
    "F772",
    "F773",
    "F774",
    "F775",
    "F776",
    "F777",
    "F779",
    "F780",
    "F781",
    "F783",
    "F784",
    "F785",
    "F786",
    "F788",
    "F789",
    "F791",
    "F793",
    "F795",
    "F797",
    "F798",
    "F799",
    "F801",
    "F802",
    "F806",
    "F808",
    "F809",
    "F810",
    "F811",
    "F813",
    "F814",
    "F815",
    "F816",
    "F817",
    "F818",
    "F820",
    "F822",
    "F826",
    "F828",
    "F829",
    "F830",
    "F831",
    "F832",
    "F833",
    "F835",
    "F836",
    "F838",
    "F839",
    "F840",
    "F841",
    "F842",
    "F843",
    "F844",
    "F845",
    "F846",
    "F847",
    "F848",
    "F849",
    "F851",
    "F852",
    "F856",
    "F857",
    "F858",
    "F859",
    "F861",
    "F862",
    "F863",
    "F864",
    "F865",
    "F866",
    "F867",
    "F868",
    "F870",
    "F871",
    "F872",
    "F874",
    "F876",
    "F877",
    "F878",
    "F880",
    "F881",
    "F882",
    "F883",
    "F884",
    "F886",
    "F887",
    "F889",
    "F890",
    "F891",
    "F892",
    "F893",
    "F894",
    "F895",
    "F898",
    "F899",
    "F900",
    "F901",
    "F902",
    "F904",
    "F906",
    "F907",
    "F908",
    "F910",
    "F911",
    "F912",
    "F913",
    "F914",
    "F915",
    "F916",
    "F917",
    "F918",
    "F920",
    "F921",
    "F922",
    "F923",
    "F924",
    "F925",
    "F926",
    "F927",
    "F929",
    "F930",
    "F931",
    "F932",
    "F933",
    "F934",
    "F935",
    "F937",
    "F939",
    "F941",
    "F942",
    "F943",
    "F944",
    "F947",
    "F948",
    "F949",
    "F950",
    "F951",
    "F952",
    "F955",
    "F956",
    "F957",
    "F958",
    "F960",
    "F961",
    "F962",
    "F963",
    "F964",
    "F965",
    "F966",
    "F967",
    "F968",
    "F970",
    "F972",
    "F974",
    "F975",
    "F976",
    "F977",
    "F978",
    "F979",
    "F980",
    "F981",
    "F982",
    "F983",
    "F985",
    "F986",
    "F987",
    "F988",
    "F989",
    "F990",
    "F991",
    "F992",
    "F993",
    "F994",
    "F995",
    "F996",
    "F997",
    "F998",
    "F999",
    "G001",
    "G002",
    "G003",
    "G004",
    "G005",
    "G006",
    "G007",
    "G008",
    "G009",
    "G010",
    "G011",
    "G012",
    "G015",
    "G016",
    "G018",
    "G019",
    "G020",
    "G021",
    "G022",
    "G023",
    "G025",
    "G026",
    "G028",
    "G030",
    "G031",
    "G032",
    "G034",
    "G036",
    "G037",
    "G039",
    "G040",
    "G041",
    "G042",
    "G043",
    "G044",
    "G045",
    "G046",
    "G047",
    "G048",
    "G049",
    "G050",
    "G054",
    "G056",
    "G058",
    "G061",
    "G062",
    "G063",
    "G064",
    "G065",
    "G066",
    "G068",
    "G070",
    "G071",
    "G074",
    "G075",
    "G076",
    "G078",
    "G079",
    "G080",
    "G081",
    "G082",
    "G083",
    "G084",
    "G086",
    "G087",
    "G088",
    "G090",
    "G093",
    "G095",
    "G096",
    "G097",
    "G098",
    "G102",
    "G103",
    "G105",
    "G107",
    "G108",
    "G109",
    "G110",
    "G111",
    "G113",
    "G114",
    "G115",
    "G116",
    "G117",
    "G118",
    "G119",
    "G120",
    "G121",
    "G122",
    "G123",
    "G124",
    "G125",
    "G126",
    "G128",
    "G129",
    "G130",
    "G131",
    "G133",
    "G134",
    "G135",
    "G136",
    "G137",
    "G139",
    "G140",
    "G141",
    "G142",
    "G143",
    "G144",
    "G145",
    "G146",
    "G147",
    "G148",
    "G149",
    "G150",
    "G151",
    "G152",
    "G153",
    "G154",
    "G155",
    "G156",
    "G157",
    "G158",
    "G159",
    "G160",
    "G161",
    "G163",
    "G164",
    "G165",
    "G166",
    "G167",
    "G168",
    "G169",
    "G170",
    "G171",
    "G173",
    "G178",
    "G179",
    "G181",
    "G183",
    "G184",
    "G185",
    "G186",
    "G187",
    "G188",
    "G189",
    "G190",
    "G191",
    "G192",
    "G193",
    "G194",
    "G195",
    "G196",
    "G197",
    "G198",
    "G199",
    "G200",
    "G201",
    "G202",
    "G203",
    "G204",
    "G205",
    "G206",
    "G207",
    "G208",
    "G209",
    "G210",
    "G211",
    "G212",
    "G213",
    "G215",
    "G217",
    "G218",
    "G220",
    "G222",
    "G223",
    "G224",
    "G225",
    "G226",
    "G227",
    "G228",
    "G229",
    "G230",
    "G232",
    "G233",
    "G234",
    "G237",
    "G238",
    "G240",
    "G241",
    "G242",
    "G243",
    "G247",
    "G248",
    "G249",
    "G250",
    "G251",
    "G252",
    "G253",
    "G254",
    "G255",
    "G257",
    "G258",
    "G259",
    "G260",
    "G261",
    "G262",
    "G263",
    "G264",
    "G266",
    "G267",
    "G268",
    "G270",
    "G271",
    "G272",
    "G273",
    "G274",
    "G275",
    "G276",
    "G277",
    "G278",
    "G280",
    "G281",
    "G282",
    "G283",
    "G284",
    "G285",
    "G286",
    "G287",
    "G288",
    "G289",
    "G290",
    "G291",
    "G292",
    "G293",
    "G294",
    "G295",
    "G296",
    "G297",
    "G298",
    "G299",
    "G300",
    "G302",
    "G303",
    "G304",
    "G305",
    "G306",
    "G307",
    "G308",
    "G309",
    "G311",
    "G312",
    "G315",
    "G316",
    "G317",
    "G318",
    "G319",
    "G320",
    "G323",
    "G324",
    "G325",
    "G327",
    "G328",
    "G330",
    "G331",
    "G333",
    "G334",
    "G335",
    "G336",
    "G337",
    "G338",
    "G339",
    "G340",
    "G342",
    "G344",
    "G346",
    "G347",
    "G348",
    "G349",
    "G350",
    "G352",
    "G353",
    "G354",
    "G358",
    "G359",
    "G361",
    "G362",
    "G364",
    "G365",
    "G367",
    "G368",
    "G370",
    "G371",
    "G372",
    "G374",
    "G376",
    "G377",
    "G378",
    "G379",
    "G381",
    "G382",
    "G383",
    "G384",
    "G385",
    "G386",
    "G387",
    "G388",
    "G389",
    "G391",
    "G392",
    "G393",
    "G394",
    "G395",
    "G397",
    "G398",
    "G402",
    "G403",
    "G404",
    "G406",
    "G407",
    "G408",
    "G410",
    "G411",
    "G412",
    "G415",
    "G416",
    "G417",
    "G418",
    "G419",
    "G420",
    "G421",
    "G424",
    "G426",
    "G428",
    "G429",
    "G430",
    "G431",
    "G432",
    "G433",
    "G434",
    "G435",
    "G436",
    "G437",
    "G438",
    "G439",
    "G441",
    "G442",
    "G443",
    "G444",
    "G445",
    "G446",
    "G447",
    "G449",
    "G450",
    "G452",
    "G453",
    "G454",
    "G455",
    "G456",
    "G457",
    "G458",
    "G459",
    "G461",
    "G462",
    "G463",
    "G465",
    "G467",
    "G469",
    "G471",
    "G474",
    "G475",
    "G476",
    "G477",
    "G478",
    "G479",
    "G480",
    "G481",
    "G482",
    "G483",
    "G484",
    "G485",
    "G486",
    "G487",
    "G488",
    "G489",
    "G491",
    "G492",
    "G493",
    "G494",
    "G495",
    "G496",
    "G497",
    "G498",
    "G499",
    "G500",
    "G502",
    "G504",
    "G505",
    "G506",
    "G507",
    "G508",
    "G509",
    "G510",
    "G511",
    "G512",
    "G513",
    "G514",
    "G515",
    "G516",
    "G517",
    "G518",
    "G519",
    "G520",
    "G521",
    "G522",
    "G523",
    "G524",
    "G525",
    "G526",
    "G528",
    "G529",
    "G532",
    "G534",
    "G535",
    "G538",
    "G540",
    "G541",
    "G542",
    "G543",
    "G545",
    "G546",
    "G547",
    "G549",
    "G551",
    "G553",
    "G555",
    "G556",
    "G557",
    "G558",
    "G559",
    "G560",
    "G561",
    "G564",
    "G565",
    "G566",
    "G568",
    "G570",
    "G571",
    "G572",
    "G574",
    "G575",
    "G576",
    "G577",
    "G579",
    "G580",
    "G582",
    "G583",
    "G587",
    "G588",
    "G589",
    "G590",
    "G591",
    "G592",
    "G593",
    "G594",
    "G596",
    "G597",
    "G598",
    "G600",
    "G601",
    "G602",
    "G603",
    "G604",
    "G605",
    "G606",
    "G607",
    "G608",
    "G609",
    "G610",
    "G611",
    "G612",
    "G613",
    "G614",
    "G615",
    "G616",
    "G618",
    "G619",
    "G620",
    "G621",
    "G622",
    "G623",
    "G624",
    "G625",
    "G626",
    "G627",
    "G628",
    "G629",
    "G630",
    "G631",
    "G632",
    "G634",
    "G635",
    "G636",
    "G639",
    "G642",
    "G643",
    "G645",
    "G646",
    "G647",
    "G648",
    "G649",
    "G650",
    "G651",
    "G653",
    "G656",
    "G657",
    "G658",
    "G659",
    "G660",
    "G661",
    "G662",
    "G663",
    "G664",
    "G665",
    "G666",
    "G669",
    "G670",
    "G671",
    "G672",
    "G673",
    "G674",
    "G676",
    "G678",
    "G680",
    "G681",
    "G682",
    "G683",
    "G684",
    "G685",
    "G686",
    "G687",
    "G688",
    "G690",
    "G691",
    "G692",
    "G693",
    "G694",
    "G696",
    "G697",
    "G698",
    "G699",
    "G702",
    "G703",
    "G704",
    "G705",
    "G707",
    "G710",
    "G712",
    "G713",
    "G716",
    "G717",
    "G718",
    "G719",
    "G720",
    "G721",
    "G722",
    "G724",
    "G726",
    "G727",
    "G728",
    "G729",
    "G733",
    "G734",
    "G735",
    "G736",
    "G737",
    "G740",
    "G741",
    "G742",
    "G743",
    "G746",
    "G747",
    "G749",
    "G751",
    "G752",
    "G753",
    "G754",
    "G756",
    "G757",
    "G758",
    "G760",
    "G761",
    "G762",
    "G763",
    "G764",
    "G765",
    "G766",
    "G767",
    "G768",
    "G769",
    "G770",
    "G771",
    "G772",
    "G773",
    "G774",
    "G775",
    "G776",
    "G777",
    "G779",
    "G780",
    "G782",
    "G784",
    "G785",
    "G786",
    "G787",
    "G788",
    "G789",
    "G790",
    "G791",
    "G792",
    "G793",
    "G794",
    "G795",
    "G796",
    "G797",
    "G798",
    "G799",
    "G800",
    "G801",
    "G802",
    "G803",
    "G804",
    "G805",
    "G806",
    "G807",
    "G808",
    "G809",
    "G811",
    "G812",
    "G813",
    "G814",
    "G815",
    "G816",
    "G817",
    "G818",
    "G820",
    "G821",
    "G822",
    "G823",
    "G825",
    "G826",
    "G827",
    "G829",
    "G830",
    "G831",
    "G833",
    "G834",
    "G836",
    "G837",
    "G838",
    "G839",
    "G840",
    "G842",
    "G843",
    "G844",
    "G846",
    "G847",
    "G848",
    "G849",
    "G850",
    "G851",
    "G852",
    "G853",
    "G854",
    "G855",
    "G856",
    "G858",
    "G859",
    "G860",
    "G861",
    "G862",
    "G864",
    "G865",
    "G866",
    "G867",
    "G869",
    "G870",
    "G871",
    "G872",
    "G873",
    "G874",
    "G875",
    "G877",
    "G878",
    "G879",
    "G881",
    "G882",
    "G886",
    "G887",
    "G888",
    "G889",
    "G890",
    "G891",
    "G894",
    "G895",
    "G900",
    "G902",
    "G903",
    "G904",
    "G905",
    "G906",
    "G907",
    "G909",
    "G910",
    "G912",
    "G913",
    "G914",
    "G916",
    "G917",
    "G919",
    "G920",
    "G921",
    "G922",
    "G923",
    "G924",
    "G925",
    "G926",
    "G927",
    "G929",
    "G931",
    "G932",
    "G933",
    "G934",
    "G935",
    "G936",
    "G937",
    "G939",
    "G940",
    "G942",
    "G943",
    "G944",
    "G945",
    "G947",
    "G949",
    "G951",
    "G953",
    "G954",
    "G955",
    "G957",
    "G959",
    "G960",
    "G961",
    "G962",
    "G963",
    "G964",
    "G965",
    "G966",
    "G968",
    "G969",
    "G970",
    "G972",
    "G973",
    "G974",
    "G975",
    "G976",
    "G977",
    "G978",
    "G979",
    "G980",
    "G981",
    "G982",
    "G985",
    "G986",
    "G987",
    "G988",
    "G990",
    "G991",
    "G992",
    "G993",
    "G994",
    "G995",
    "G997",
    "G999",
    "H001",
    "H002",
    "H004",
    "H006",
    "H007",
    "H010",
    "H011",
    "H013",
    "H014",
    "H015",
    "H017",
    "H018",
    "H019",
    "H020",
    "H021",
    "H022",
    "H026",
    "H027",
    "H028",
    "H029",
    "H030",
    "H033",
    "H034",
    "H036",
    "H037",
    "H038",
    "H040",
    "H042",
    "H043",
    "H045",
    "H046",
    "H048",
    "H052",
    "H055",
    "H056",
    "H059",
    "H061",
    "H062",
    "H063",
    "H068",
    "H069",
    "H070",
    "H071",
    "H072",
    "H073",
    "H074",
    "H076",
    "H077",
    "H078",
    "H081",
    "H083",
    "H085",
    "H086",
    "H087",
    "H088",
    "H089",
    "H090",
    "H091",
    "H094",
    "H095",
    "H096",
    "H097",
    "H098",
    "H100",
    "H101",
    "H102",
    "H104",
    "H106",
    "H107",
    "H108",
    "H109",
    "H110",
    "H114",
    "H117",
    "H118",
    "H119",
    "H120",
    "H121",
    "H122",
    "H126",
    "H127",
    "H128",
    "H129",
    "H130",
    "H131",
    "H132",
    "H134",
    "H140",
    "H143",
    "H146",
    "H147",
    "H148",
    "H150",
    "H151",
    "H152",
    "H153",
    "H154",
    "H156",
    "H157",
    "H159",
    "H161",
    "H163",
    "H165",
    "H166",
    "H168",
    "H173",
    "H174",
    "H175",
    "H176",
    "H177",
    "H180",
    "H182",
    "H183",
    "H184",
    "H185",
    "H186",
    "H187",
    "H188",
    "H189",
    "H192",
    "H194",
    "H195",
    "H196",
    "H198",
    "H199",
    "H200",
    "H202",
    "H203",
    "H204",
    "H205",
    "H206",
    "H207",
    "H210",
    "H211",
    "H212",
    "H213",
    "H214",
    "H216",
    "H218",
    "H219",
    "H220",
    "H221",
    "H222",
    "H223",
    "H224",
    "H225",
    "H227",
    "H228",
    "H229",
    "H230",
    "H233",
    "H235",
    "H236",
    "H238",
    "H240",
    "H242",
    "H243",
    "H244",
    "H245",
    "H246",
    "H247",
    "H250",
    "H253",
    "H255",
    "H256",
    "H257",
    "H258",
    "H259",
    "H262",
    "H263",
    "H264",
    "H265",
    "H266",
    "H267",
    "H268",
    "H269",
    "H270",
    "H271",
    "H272",
    "H273",
    "H274",
    "H275",
    "H276",
    "H277",
    "H280",
    "H281",
    "H282",
    "H284",
    "H285",
    "H286",
    "H287",
    "H288",
    "H289",
    "H293",
    "H294",
    "H298",
    "H299",
    "H300",
    "H301",
    "H302",
    "H303",
    "H304",
    "H307",
    "H308",
    "H311",
    "H312",
    "H313",
    "H314",
    "H315",
    "H316",
    "H319",
    "H320",
    "H321",
    "H323",
    "H324",
    "H325",
    "H326",
    "H327",
    "H328",
    "H330",
    "H331",
    "H333",
    "H334",
    "H335",
    "H336",
    "H337",
    "H338",
    "H340",
    "H341",
    "H342",
    "H343",
    "H344",
    "H346",
    "H347",
    "H348",
    "H350",
    "H353",
    "H354",
    "H355",
    "H356",
    "H357",
    "H359",
    "H361",
    "H362",
    "H363",
    "H364",
    "H365",
    "H366",
    "H367",
    "H369",
    "H371",
    "H372",
    "H373",
    "H375",
    "H376",
    "H377",
    "H378",
    "H379",
    "H380",
    "H382",
    "H383",
    "H384",
    "H385",
    "H386",
    "H387",
    "H389",
    "H390",
    "H391",
    "H392",
    "H393",
    "H394",
    "H395",
    "H396",
    "H398",
    "H399",
    "H400",
    "H401",
    "H402",
    "H403",
    "H404",
    "H405",
    "H406",
    "H407",
    "H408",
    "H409",
    "H410",
    "H411",
    "H412",
    "H413",
    "H414",
    "H416",
    "H417",
    "H418",
    "H420",
    "H421",
    "H422",
    "H423",
    "H424",
    "H425",
    "H426",
    "H427",
    "H428",
    "H429",
    "H431",
    "H432",
    "H433",
    "H434",
    "H436",
    "H437",
    "H438",
    "H439",
    "H440",
    "H441",
    "H442",
    "H443",
    "H444",
    "H445",
    "H446",
    "H447",
    "H448",
    "H449",
    "H450",
    "H451",
    "H452",
    "H453",
    "H454",
    "H455",
    "H456",
    "H458",
    "H459",
    "H460",
    "H461",
    "H462",
    "H465",
    "H466",
    "H467",
    "H468",
    "H470",
    "H472",
    "H473",
    "H474",
    "H475",
    "H477",
    "H478",
    "H479",
    "H480",
    "H481",
    "H484",
    "H485",
    "H486",
    "H488",
    "H489",
    "H490",
    "H491",
    "H492",
    "H493",
    "H494",
    "H495",
    "H497",
    "H498",
    "H500",
    "H501",
    "H502",
    "H503",
    "H505",
    "H507",
    "H508",
    "H509",
    "H511",
    "H512",
    "H514",
    "H516",
    "H517",
    "H518",
    "H519",
    "H521",
    "H522",
    "H523",
    "H525",
    "H527",
    "H528",
    "H529",
    "H531",
    "H532",
    "H533",
    "H534",
    "H535",
    "H536",
    "H537",
    "H538",
    "H539",
    "H540",
    "H541",
    "H542",
    "H544",
    "H546",
    "H547",
    "H549",
    "H552",
    "H553",
    "H554",
    "H555",
    "H556",
    "H558",
    "H559",
    "H560",
    "H561",
    "H562",
    "H564",
    "H565",
    "H566",
    "H568",
    "H569",
    "H570",
    "H572",
    "H573",
    "H574",
    "H575",
    "H577",
    "H578",
    "H580",
    "H581",
    "H583",
    "H584",
    "H585",
    "H588",
    "H589",
    "H590",
    "H591",
    "H592",
    "H593",
    "H594",
    "H598",
    "H599",
    "H601",
    "H602",
    "H604",
    "H606",
    "H607",
    "H608",
    "H609",
    "H610",
    "H612",
    "H614",
    "H615",
    "H618",
    "H620",
    "H621",
    "H622",
    "H623",
    "H625",
    "H627",
    "H628",
    "H629",
    "H630",
    "H631",
    "H632",
    "H633",
    "H634",
    "H635",
    "H639",
    "H641",
    "H642",
    "H643",
    "H644",
    "H645",
    "H646",
    "H647",
    "H650",
    "H652",
    "H654",
    "H655",
    "H657",
    "H658",
    "H659",
    "H661",
    "H662",
    "H665",
    "H666",
    "H669",
    "H670",
    "H671",
    "H672",
    "H673",
    "H674",
    "H675",
    "H676",
    "H677",
    "H678",
    "H679",
    "H681",
    "H682",
    "H683",
    "H684",
    "H686",
    "H687",
    "H688",
    "H689",
    "H690",
    "H691",
    "H693",
    "H694",
    "H695",
    "H699",
    "H700",
    "H701",
    "H702",
    "H703",
    "H704",
    "H706",
    "H707",
    "H708",
    "H710",
    "H712",
    "H713",
    "H714",
    "H715",
    "H716",
    "H717",
    "H719",
    "H720",
    "H723",
    "H724",
    "H725",
    "H726",
    "H727",
    "H729",
    "H730",
    "H731",
    "H732",
    "H733",
    "H734",
    "H735",
    "H736",
    "H738",
    "H739",
    "H743",
    "H744",
    "H745",
    "H746",
    "H749",
    "H752",
    "H753",
    "H754",
    "H755",
    "H756",
    "H757",
    "H760",
    "H763",
    "H764",
    "H765",
    "H766",
    "H767",
    "H768",
    "H769",
    "H770",
    "H771",
    "H772",
    "H773",
    "H774",
    "H775",
    "H777",
    "H778",
    "H779",
    "H780",
    "H781",
    "H782",
    "H783",
    "H784",
    "H785",
    "H786",
    "H787",
    "H789",
    "H790",
    "H791",
    "H792",
    "H793",
    "H794",
    "H795",
    "H796",
    "H797",
    "H798",
    "H799",
    "H800",
    "H801",
    "H802",
    "H803",
    "H804",
    "H805",
    "H806",
    "H807",
    "H808",
    "H809",
    "H810",
    "H811",
    "H812",
    "H814",
    "H815",
    "H816",
    "H818",
    "H819",
    "H820",
    "H821",
    "H822",
    "H823",
    "H824",
    "H825",
    "H826",
    "H827",
    "H829",
    "H831",
    "H833",
    "H834",
    "H835",
    "H836",
    "H838",
    "H839",
    "H840",
    "H841",
    "H842",
    "H843",
    "H844",
    "H845",
    "H846",
    "H847",
    "H848",
    "H850",
    "H851",
    "H852",
    "H855",
    "H856",
    "H857",
    "H858",
    "H859",
    "H860",
    "H861",
    "H862",
    "H865",
    "H867",
    "H868",
    "H870",
    "H872",
    "H873",
    "H875",
    "H876",
    "H877",
    "H878",
    "H880",
    "H881",
    "H882",
    "H883",
    "H884",
    "H885",
    "H887",
    "H888",
    "H889",
    "H890",
    "H891",
    "H892",
    "H893",
    "H894",
    "H895",
    "H896",
    "H897",
    "H898",
    "H899",
    "H900",
    "H901",
    "H903",
    "H906",
    "H907",
    "H910",
    "H912",
    "H913",
    "H914",
    "H916",
    "H917",
    "H918",
    "H919",
    "H920",
    "H921",
    "H922",
    "H923",
    "H924",
    "H926",
    "H928",
    "H929",
    "H930",
    "H931",
    "H933",
    "H935",
    "H936",
    "H937",
    "H938",
    "H939",
    "H940",
    "H941",
    "H942",
    "H943",
    "H944",
    "H945",
    "H949",
    "H951",
    "H952",
    "H953",
    "H955",
    "H956",
    "H957",
    "H958",
    "H959",
    "H961",
    "H962",
    "H964",
    "H967",
    "H969",
    "H970",
    "H971",
    "H973",
    "H974",
    "H975",
    "H976",
    "H977",
    "H978",
    "H979",
    "H981",
    "H982",
    "H984",
    "H985",
    "H986",
    "H987",
    "H988",
    "H989",
    "H990",
    "H991",
    "H992",
    "H994",
    "H996",
    "H997",
    "H999",
    "I002",
    "I003",
    "I005",
    "I007",
    "I008",
    "I011",
    "I012",
    "I014",
    "I016",
    "I017",
    "I018",
    "I019",
    "I023",
    "I024",
    "I025",
    "I026",
    "I027",
    "I028",
    "I029",
    "I030",
    "I031",
    "I032",
    "I034",
    "I035",
    "I037",
    "I040",
    "I042",
    "I045",
    "I046",
    "I048",
    "I049",
    "I051",
    "I052",
    "I053",
    "I054",
    "I056",
    "I057",
    "I058",
    "I059",
    "I060",
    "I061",
    "I062",
    "I063",
    "I065",
    "I066",
    "I071",
    "I072",
    "I073",
    "I076",
    "I079",
    "I082",
    "I084",
    "I086",
    "I088",
    "I089",
    "I090",
    "I092",
    "I093",
    "I095",
    "I096",
    "I098",
    "I102",
    "I103",
    "I105",
    "I107",
    "I108",
    "I109",
    "I110",
    "I113",
    "I114",
    "I115",
    "I116",
    "I117",
    "I118",
    "I119",
    "I120",
    "I121",
    "I122",
    "I123",
    "I124",
    "I125",
    "I126",
    "I128",
    "I129",
    "I130",
    "I131",
    "I132",
    "I133",
    "I135",
    "I136",
    "I137",
    "I138",
    "I139",
    "I140",
    "I142",
    "I143",
    "I144",
    "I145",
    "I147",
    "I148",
    "I150",
    "I151",
    "I152",
    "I153",
    "I154",
    "I155",
    "I156",
    "I157",
    "I158",
    "I162",
    "I163",
    "I164",
    "I165",
    "I166",
    "I168",
    "I169",
    "I170",
    "I171",
    "I172",
    "I173",
    "I174",
    "I175",
    "I176",
    "I177",
    "I178",
    "I179",
    "I181",
    "I182",
    "I183",
    "I184",
    "I185",
    "I187",
    "I188",
    "I189",
    "I190",
    "I191",
    "I192",
    "I193",
    "I196",
    "I197",
    "I198",
    "I199",
    "I201",
    "I202",
    "I203",
    "I205",
    "I206",
    "I207",
    "I208",
    "I210",
    "I213",
    "I214",
    "I215",
    "I216",
    "I217",
    "I219",
    "I220",
    "I221",
    "I224",
    "I225",
    "I230",
    "I232",
    "I233",
    "I234",
    "I236",
    "I237",
    "I238",
    "I240",
    "I242",
    "I243",
    "I244",
    "I247",
    "I248",
    "I249",
    "I251",
    "I253",
    "I254",
    "I255",
    "I256",
    "I258",
    "I259",
    "I260",
    "I261",
    "I262",
    "I263",
    "I264",
    "I265",
    "I266",
    "I271",
    "I273",
    "I274",
    "I275",
    "I276",
    "I277",
    "I278",
    "I279",
    "I280",
    "I281",
    "I282",
    "I283",
    "I284",
    "I286",
    "I287",
    "I288",
    "I289",
    "I290",
    "I291",
    "I292",
    "I293",
    "I294",
    "I296",
    "I298",
    "I300",
    "I301",
    "I302",
    "I304",
    "I305",
    "I306",
    "I307",
    "I308",
    "I309",
    "I310",
    "I311",
    "I312",
    "I314",
    "I315",
    "I316",
    "I317",
    "I318",
    "I319",
    "I320",
    "I321",
    "I322",
    "I324",
    "I326",
    "I327",
    "I328",
    "I329",
    "I330",
    "I332",
    "I333",
    "I335",
    "I336",
    "I337",
    "I339",
    "I341",
    "I342",
    "I344",
    "I346",
    "I347",
    "I348",
    "I350",
    "I351",
    "I352",
    "I353",
    "I354",
    "I356",
    "I357",
    "I359",
    "I360",
    "I361",
    "I362",
    "I363",
    "I364",
    "I365",
    "I367",
    "I368",
    "I370",
    "I371",
    "I372",
    "I373",
    "I374",
    "I375",
    "I376",
    "I377",
    "I381",
    "I382",
    "I384",
    "I388",
    "I389",
    "I390",
    "I391",
    "I392",
    "I393",
    "I394",
    "I396",
    "I400",
    "I401",
    "I402",
    "I403",
    "I404",
    "I405",
    "I407",
    "I408",
    "I409",
    "I410",
    "I411",
    "I412",
    "I414",
    "I415",
    "I416",
    "I417",
    "I418",
    "I420",
    "I421",
    "I422",
    "I423",
    "I424",
    "I425",
    "I426",
    "I428",
    "I429",
    "I430",
    "I431",
    "I432",
    "I433",
    "I434",
    "I435",
    "I436",
    "I437",
    "I438",
    "I439",
    "I441",
    "I442",
    "I443",
    "I444",
    "I445",
    "I447",
    "I448",
    "I449",
    "I451",
    "I452",
    "I453",
    "I454",
    "I455",
    "I457",
    "I460",
    "I461",
    "I462",
    "I463",
    "I464",
    "I465",
    "I466",
    "I467",
    "I468",
    "I469",
    "I470",
    "I471",
    "I472",
    "I473",
    "I475",
    "I476",
    "I477",
    "I478",
    "I479",
    "I480",
    "I482",
    "I483",
    "I484",
    "I485",
    "I486",
    "I487",
    "I489",
    "I490",
    "I492",
    "I493",
    "I494",
    "I496",
    "I497",
    "I498",
    "I499",
    "I501",
    "I503",
    "I504",
    "I506",
    "I507",
    "I510",
    "I511",
    "I512",
    "I519",
    "I520",
    "I522",
    "I523",
    "I526",
    "I527",
    "I529",
    "I530",
    "I531",
    "I532",
    "I533",
    "I534",
    "I535",
    "I536",
    "I537",
    "I538",
    "I539",
    "I540",
    "I541",
    "I543",
    "I544",
    "I545",
    "I546",
    "I548",
    "I549",
    "I551",
    "I553",
    "I554",
    "I555",
    "I556",
    "I558",
    "I559",
    "I561",
    "I562",
    "I563",
    "I564",
    "I565",
    "I566",
    "I567",
    "I569",
    "I570",
    "I571",
    "I573",
    "I576",
    "I577",
    "I578",
    "I580",
    "I581",
    "I582",
    "I585",
    "I588",
    "I589",
    "I590",
    "I591",
    "I592",
    "I593",
    "I594",
    "I595",
    "I597",
    "I598",
    "I599",
    "I600",
    "I601",
    "I602",
    "I603",
    "I604",
    "I605",
    "I606",
    "I607",
    "I608",
    "I609",
    "I610",
    "I611",
    "I612",
    "I613",
    "I614",
    "I615",
    "I618",
    "I621",
    "I622",
    "I624",
    "I625",
    "I626",
    "I627",
    "I628",
    "I629",
    "I630",
    "I631",
    "I632",
    "I633",
    "I634",
    "I635",
    "I636",
    "I637",
    "I639",
    "I640",
    "I641",
    "I642",
    "I643",
    "I644",
    "I645",
    "I646",
    "I647",
    "I648",
    "I649",
    "I651",
    "I652",
    "I653",
    "I654",
    "I655",
    "I656",
    "I657",
    "I659",
    "I660",
    "I661",
    "I662",
    "I663",
    "I666",
    "I667",
    "I668",
    "I669",
    "I671",
    "I673",
    "I676",
    "I677",
    "I678",
    "I679",
    "I681",
    "I682",
    "I683",
    "I684",
    "I686",
    "I687",
    "I688",
    "I689",
    "I690",
    "I692",
    "I693",
    "I695",
    "I696",
    "I697",
    "I698",
    "I699",
    "I700",
    "I701",
    "I702",
    "I703",
    "I704",
    "I705",
    "I706",
    "I707",
    "I709",
    "I711",
    "I712",
    "I714",
    "I715",
    "I716",
    "I717",
    "I718",
    "I720",
    "I721",
    "I723",
    "I724",
    "I725",
    "I726",
    "I727",
    "I728",
    "I729",
    "I730",
    "I732",
    "I734",
    "I735",
    "I736",
    "I738",
    "I739",
    "I741",
    "I742",
    "I743",
    "I744",
    "I745",
    "I747",
    "I748",
    "I749",
    "I750",
    "I751",
    "I752",
    "I753",
    "I754",
    "I756",
    "I757",
    "I758",
    "I759",
    "I761",
    "I765",
    "I767",
    "I771",
    "I774",
    "I775",
    "I777",
    "I778",
    "I779",
    "I780",
    "I781",
    "I782",
    "I783",
    "I785",
    "I786",
    "I787",
    "I790",
    "I791",
    "I793",
    "I794",
    "I796",
    "I797",
    "I798",
    "I799",
    "I800",
    "I801",
    "I802",
    "I803",
    "I804",
    "I805",
    "I808",
    "I809",
    "I812",
    "I813",
    "I815",
    "I817",
    "I819",
    "I820",
    "I821",
    "I822",
    "I823",
    "I824",
    "I825",
    "I826",
    "I827",
    "I828",
    "I829",
    "I830",
    "I831",
    "I832",
    "I838",
    "I839",
    "I840",
    "I841",
    "I843",
    "I844",
    "I847",
    "I848",
    "I849",
    "I850",
    "I851",
    "I852",
    "I853",
    "I854",
    "I855",
    "I856",
    "I857",
    "I858",
    "I860",
    "I861",
    "I862",
    "I863",
    "I864",
    "I865",
    "I866",
    "I867",
    "I868",
    "I869",
    "I871",
    "I872",
    "I873",
    "I874",
    "I875",
    "I876",
    "I877",
    "I878",
    "I879",
    "I880",
    "I881",
    "I884",
    "I885",
    "I886",
    "I887",
    "I888",
    "I891",
    "I892",
    "I893",
    "I894",
    "I895",
    "I896",
    "I899",
    "I901",
    "I902",
    "I903",
    "I904",
    "I905",
    "I906",
    "I907",
    "I908",
    "I909",
    "I910",
    "I911",
    "I912",
    "I914",
    "I916",
    "I917",
    "I919",
    "I921",
    "I922",
    "I923",
    "I924",
    "I925",
    "I926",
    "I927",
    "I928",
    "I929",
    "I930",
    "I932",
    "I935",
    "I936",
    "I937",
    "I938",
    "I939",
    "I941",
    "I942",
    "I943",
    "I945",
    "I946",
    "I947",
    "I948",
    "I949",
    "I950",
    "I951",
    "I953",
    "I954",
    "I955",
    "I956",
    "I959",
    "I960",
    "I962",
    "I963",
    "I964",
    "I965",
    "I968",
    "I969",
    "I970",
    "I973",
    "I974",
    "I975",
    "I976",
    "I977",
    "I978",
    "I980",
    "I981",
    "I982",
    "I984",
    "I985",
    "I986",
    "I990",
    "I991",
    "I992",
    "I993",
    "I994",
    "I995",
    "I996",
    "I997",
    "I998",
    "L002",
    "L003",
    "L004",
    "L006",
    "L007",
    "L008",
    "L009",
    "L010",
    "L011",
    "L013",
    "L014",
    "L015",
    "L016",
    "L017",
    "L018",
    "L019",
    "L020",
    "L022",
    "L023",
    "L024",
    "L025",
    "L026",
    "L027",
    "L030",
    "L032",
    "L034",
    "L035",
    "L036",
    "L037",
    "L038",
    "L039",
    "L040",
    "L042",
    "L046",
    "L047",
    "L048",
    "L049",
    "L050",
    "L055",
    "L056",
    "L057",
    "L058",
    "L059",
    "L061",
    "L062",
    "L063",
    "L064",
    "L065",
    "L066",
    "L069",
    "L070",
    "L071",
    "L073",
    "L074",
    "L075",
    "L078",
    "L081",
    "L082",
    "L083",
    "L084",
    "L085",
    "L086",
    "L087",
    "L088",
    "L089",
    "L090",
    "L093",
    "L094",
    "L096",
    "L097",
    "L100",
    "L102",
    "L103",
    "L104",
    "L105",
    "L106",
    "L108",
    "L109",
    "L111",
    "L112",
    "L113",
    "L115",
    "L116",
    "L117",
    "L118",
    "L120",
    "L121",
    "L122",
    "L123",
    "L124",
    "L125",
    "L126",
    "L127",
    "L131",
    "L132",
    "L134",
    "L136",
    "L138",
    "L139",
    "L140",
    "L142",
    "L143",
    "L144",
    "L145",
    "L146",
    "L147",
    "L149",
    "L150",
    "L152",
    "L153",
    "L154",
    "L155",
    "L156",
    "L157",
    "L158",
    "L160",
    "L164",
    "L165",
    "L166",
    "L167",
    "L168",
    "L169",
    "L172",
    "L173",
    "L174",
    "L175",
    "L176",
    "L177",
    "L178",
    "L180",
    "L181",
    "L182",
    "L183",
    "L184",
    "L185",
    "L186",
    "L187",
    "L188",
    "L189",
    "L190",
    "L191",
    "L192",
    "L193",
    "L194",
    "L195",
    "L197",
    "L199",
    "L200",
    "L202",
    "L203",
    "L204",
    "L205",
    "L206",
    "L207",
    "L210",
    "L211",
    "L212",
    "L213",
    "L214",
    "L215",
    "L216",
    "L217",
    "L218",
    "L219",
    "L220",
    "L221",
    "L223",
    "L224",
    "L225",
    "L227",
    "L228",
    "L229",
    "L230",
    "L231",
    "L233",
    "L235",
    "L237",
    "L238",
    "L239",
    "L240",
    "L241",
    "L243",
    "L244",
    "L245",
    "L246",
    "L247",
    "L248",
    "L250",
    "L251",
    "L252",
    "L253",
    "L254",
    "L256",
    "L257",
    "L258",
    "L259",
    "L262",
    "L263",
    "L265",
    "L267",
    "L269",
    "L270",
    "L271",
    "L272",
    "L273",
    "L274",
    "L276",
    "L277",
    "L278",
    "L279",
    "L280",
    "L281",
    "L282",
    "L284",
    "L285",
    "L286",
    "L287",
    "L290",
    "L291",
    "L292",
    "L293",
    "L294",
    "L295",
    "L296",
    "L297",
    "L298",
    "L299",
    "L301",
    "L302",
    "L303",
    "L304",
    "L305",
    "L306",
    "L307",
    "L308",
    "L309",
    "L310",
    "L312",
    "L314",
    "L315",
    "L316",
    "L317",
    "L319",
    "L321",
    "L322",
    "L323",
    "L324",
    "L325",
    "L326",
    "L327",
    "L328",
    "L330",
    "L331",
    "L332",
    "L333",
    "L334",
    "L335",
    "L336",
    "L337",
    "L339",
    "L340",
    "L342",
    "L345",
    "L346",
    "L347",
    "L348",
    "L349",
    "L353",
    "L355",
    "L356",
    "L357",
    "L359",
    "L361",
    "L363",
    "L364",
    "L366",
    "L367",
    "L369",
    "L372",
    "L377",
    "L378",
    "L379",
    "L380",
    "L382",
    "L383",
    "L384",
    "L386",
    "L388",
    "L389",
    "L392",
    "L393",
    "L396",
    "L397",
    "L398",
    "L399",
    "L400",
    "L401",
    "L402",
    "L403",
    "L404",
    "L406",
    "L407",
    "L408",
    "L409",
    "L410",
    "L411",
    "L413",
    "L414",
    "L415",
    "L416",
    "L418",
    "L419",
    "L420",
    "L421",
    "L423",
    "L424",
    "L425",
    "L426",
    "L427",
    "L428",
    "L429",
    "L430",
    "L431",
    "L432",
    "L433",
    "L434",
    "L435",
    "L437",
    "L438",
    "L439",
    "L440",
    "L444",
    "L445",
    "L447",
    "L448",
    "L449",
    "L450",
    "L451",
    "L452",
    "L453",
    "L454",
    "L455",
    "L458",
    "L459",
    "L460",
    "L461",
    "L462",
    "L463",
    "L464",
    "L466",
    "L468",
    "L469",
    "L470",
    "L471",
    "L472",
    "L473",
    "L474",
    "L475",
    "L477",
    "L478",
    "L480",
    "L482",
    "L483",
    "L484",
    "L485",
    "L487",
    "L488",
    "L489",
    "L490",
    "L492",
    "L494",
    "L496",
    "L497",
    "L498",
    "L499",
    "L500",
    "L501",
    "L502",
    "L503",
    "L505",
    "L506",
    "L507",
    "L508",
    "L509",
    "L511",
    "L512",
    "L513",
    "L514",
    "L515",
    "L516",
    "L517",
    "L519",
    "L521",
    "L522",
    "L524",
    "L525",
    "L526",
    "L527",
    "L528",
    "L529",
    "L531",
    "L532",
    "L533",
    "L535",
    "L537",
    "L538",
    "L539",
    "L540",
    "L544",
    "L545",
    "L546",
    "L547",
    "L551",
    "L552",
    "L554",
    "L555",
    "L556",
    "L557",
    "L558",
    "L561",
    "L562",
    "L563",
    "L564",
    "L565",
    "L566",
    "L567",
    "L568",
    "L569",
    "L570",
    "L571",
    "L572",
    "L573",
    "L574",
    "L575",
    "L576",
    "L577",
    "L578",
    "L579",
    "L580",
    "L581",
    "L582",
    "L583",
    "L584",
    "L586",
    "L588",
    "L589",
    "L590",
    "L591",
    "L593",
    "L594",
    "L595",
    "L596",
    "L597",
    "L598",
    "L599",
    "L601",
    "L603",
    "L604",
    "L605",
    "L607",
    "L609",
    "L611",
    "L612",
    "L613",
    "L614",
    "L616",
    "L617",
    "L620",
    "L623",
    "L624",
    "L625",
    "L626",
    "L627",
    "L628",
    "L629",
    "L631",
    "L633",
    "L634",
    "L638",
    "L639",
    "L640",
    "L641",
    "L642",
    "L643",
    "L644",
    "L647",
    "L651",
    "L653",
    "L654",
    "L655",
    "L656",
    "L658",
    "L660",
    "L664",
    "L665",
    "L666",
    "L667",
    "L668",
    "L669",
    "L670",
    "L671",
    "L672",
    "L673",
    "L675",
    "L676",
    "L677",
    "L680",
    "L681",
    "L682",
    "L685",
    "L686",
    "L687",
    "L689",
    "L690",
    "L691",
    "L693",
    "L696",
    "L698",
    "L699",
    "L700",
    "L702",
    "L703",
    "L704",
    "L706",
    "L707",
    "L709",
    "L710",
    "L711",
    "L712",
    "L713",
    "L715",
    "L716",
    "L719",
    "L720",
    "L722",
    "L723",
    "L724",
    "L725",
    "L726",
    "L727",
    "L728",
    "L729",
    "L730",
    "L733",
    "L734",
    "L735",
    "L736",
    "L737",
    "L738",
    "L739",
    "L740",
    "L741",
    "L742",
    "L743",
    "L744",
    "L745",
    "L746",
    "L747",
    "L748",
    "L749",
    "L750",
    "L751",
    "L752",
    "L753",
    "L758",
    "L762",
    "L764",
    "L765",
    "L769",
    "L771",
    "L772",
    "L773",
    "L774",
    "L775",
    "L776",
    "L777",
    "L778",
    "L779",
    "L780",
    "L781",
    "L783",
    "L784",
    "L785",
    "L787",
    "L788",
    "L792",
    "L795",
    "L797",
    "L799",
    "L801",
    "L802",
    "L804",
    "L805",
    "L806",
    "L807",
    "L808",
    "L809",
    "L810",
    "L811",
    "L812",
    "L814",
    "L815",
    "L816",
    "L817",
    "L819",
    "L820",
    "L823",
    "L826",
    "L827",
    "L828",
    "L829",
    "L830",
    "L831",
    "L833",
    "L834",
    "L835",
    "L836",
    "L837",
    "L838",
    "L840",
    "L841",
    "L842",
    "L843",
    "L844",
    "L845",
    "L846",
    "L847",
    "L848",
    "L850",
    "L851",
    "L854",
    "L856",
    "L857",
    "L858",
    "L859",
    "L860",
    "L865",
    "L866",
    "L868",
    "L869",
    "L872",
    "L873",
    "L874",
    "L876",
    "L878",
    "L879",
    "L880",
    "L881",
    "L882",
    "L883",
    "L885",
    "L886",
    "L887",
    "L888",
    "L889",
    "L890",
    "L892",
    "L894",
    "L897",
    "L898",
    "L899",
    "L900",
    "L904",
    "L905",
    "L906",
    "L907",
    "L908",
    "L909",
    "L912",
    "L913",
    "L915",
    "L916",
    "L917",
    "L919",
    "L920",
    "L922",
    "L923",
    "L924",
    "L926",
    "L928",
    "L929",
    "L931",
    "L933",
    "L934",
    "L936",
    "L937",
    "L938",
    "L939",
    "L942",
    "L943",
    "L944",
    "L945",
    "L946",
    "L947",
    "L948",
    "L949",
    "L950",
    "L951",
    "L952",
    "L953",
    "L956",
    "L957",
    "L958",
    "L959",
    "L961",
    "L963",
    "L964",
    "L965",
    "L966",
    "L967",
    "L968",
    "L969",
    "L970",
    "L971",
    "L972",
    "L973",
    "L974",
    "L975",
    "L977",
    "L978",
    "L979",
    "L980",
    "L981",
    "L982",
    "L983",
    "L984",
    "L985",
    "L986",
    "L987",
    "L988",
    "L989",
    "L990",
    "L991",
    "L992",
    "L994",
    "L995",
    "L998",
    "L999",
    "M002",
    "M003",
    "M004",
    "M007",
    "M009",
    "M011",
    "M013",
    "M014",
    "M015",
    "M016",
    "M017",
    "M018",
    "M019",
    "M021",
    "M022",
    "M023",
    "M025",
    "M026",
    "M027",
    "M028",
    "M030",
    "M031",
    "M032",
    "M041",
    "M042",
    "M043",
    "M044",
    "M045",
    "M048",
    "M050",
    "M052",
    "M053",
    "M055",
    "M057",
    "M058",
    "M059",
    "M060",
    "M062",
    "M063",
    "M065",
    "M067",
    "M069",
    "M070",
    "M071",
    "M072",
    "M073",
    "M077",
    "M078",
    "M079",
    "M080",
    "M081",
    "M082",
    "M083",
    "M085",
    "M086",
    "M088",
    "M089",
    "M090",
    "M091",
    "M092",
    "M093",
    "M094",
    "M095",
    "M096",
    "M098",
    "M100",
    "M101",
    "M102",
    "M103",
    "M104",
    "M105",
    "M106",
    "M108",
    "M109",
    "M110",
    "M111",
    "M113",
    "M115",
    "M116",
    "M118",
    "M119",
    "M120",
    "M121",
    "M122",
    "M123",
    "M124",
    "M125",
    "M126",
    "M127",
    "M130",
    "M131",
    "M132",
    "M133",
    "M136",
    "M138",
    "M139",
    "M140",
    "M141",
    "M143",
    "M144",
    "M145",
    "M147",
    "M150",
    "M152",
    "M153",
    "M156",
    "M158",
    "M161",
    "M162",
    "M163",
    "M165",
    "M166",
    "M167",
    "M168",
    "M169",
    "M170",
    "M171",
    "M172",
    "M173",
    "M176",
    "M177",
    "M178",
    "M179",
    "M180",
    "M182",
    "M183",
    "M184",
    "M185",
    "M187",
    "M188",
    "M189",
    "M190",
    "M194",
    "M196",
    "M197",
    "M199",
    "M200",
    "M201",
    "M202",
    "M203",
    "M204",
    "M207",
    "M208",
    "M209",
    "M210",
    "M211",
    "M212",
    "M213",
    "M214",
    "M253",
    "M255",
    "M256",
    "M257",
    "M258",
    "M259",
    "M260",
    "M261",
    "M262",
    "M263",
    "M264",
    "M265",
    "M266",
    "M267",
    "M268",
    "M269",
    "M270",
    "M271",
    "M272",
    "M273",
    "M274",
    "M275",
    "M276",
    "M277",
    "M278",
    "M279",
    "M280",
    "M281",
    "M282",
    "M283",
    "M284",
    "M285",
    "M286",
    "M287",
    "M288",
    "M289",
    "M290",
    "M291",
    "M292",
    "M294",
    "M295",
    "M297",
    "M298",
    "M300",
    "M301",
    "M302",
    "M303",
    "M308",
    "M309",
    "M311",
    "M312",
    "M313",
    "M314",
    "M315",
    "M316",
    "M317",
    "M318",
    "M319",
    "M320",
    "M321",
    "M322",
    "M323",
    "M324",
    "M325",
    "M326",
    "M327",
    "M328",
    "M329",
    "M330",
    "M331",
    "M332",
    "M333",
    "M334",
    "M335",
    "M336",
    "M337",
    "M338",
    "M339",
    "M340",
    "M341",
    "M342",
    "M343",
    "M344",
    "M345",
    "M346",
    "M347",
    "M348",
    "M349",
    "M350",
    "M351",
    "M352",
    "M353",
    "M354",
    "M355",
    "M356",
    "M357",
    "M358",
    "M359",
    "M360",
    "M361",
    "M362",
    "M363",
    "M364",
    "M365",
    "M366",
    "M367",
    "M368",
    "M369",
    "M370",
    "M371",
    "M372",
    "M373",
    "M374",
    "M375",
    "M376",
    "M377",
    "M378",
    "M379",
    "M380",
    "M381",
    "M382",
    "M383",
    "M384",
    "M385",
    "M386",
    "M387",
    "M388",
    "M389",
    "M390",
    "M391",
    "M392",
    "M393",
    "M394",
    "M395",
    "M396",
    "M397",
    "M398",
    "M399",
    "M400",
    "M401",
    "M402",
    "M403",
    "M404",
    "M405",
    "M406",
    "M407",
    "M408",
    "M409",
    "M410",
    "M411",
    "M412",
    "M413",
    "M414",
    "M415",
    "M416",
    "M417",
    "M418",
    "M419",
    "M420",
    "M421",
    "M422",
    "M423",
    "M424",
    "M425",
    "M426",
    "M427",
    "M428",
    "M429",
    "M430",
    "M431",
    "M432",
)
CHECKSUM_TABLE = (
    (
        1,
        0,
        5,
        7,
        9,
        13,
        15,
        17,
        19,
        21,
        1,
        0,
        5,
        7,
        9,
        13,
        15,
        17,
        19,
        21,
        2,
        4,
        18,
        20,
        11,
        3,
        6,
        8,
        12,
        14,
        16,
        10,
        22,
        25,
        24,
        23,
    ),
    (
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
    ),
)


def checksum(value: str) -> str:
    """
    Calculates the checksum char used for the 16th char.
    Author: Vincenzo Palazzo
    """
    return chr(65 + sum(CHECKSUM_TABLE[index % 2][ALPHANUMERICS_DICT[char]] for index, char in enumerate(value)) % 26)


class Provider(SsnProvider):
    """
    Generates italian fiscal codes.
    """

    def ssn(self) -> str:
        sex: int = self.random_int(min=0, max=1)
        surname: str = self._get_surname_letters()
        name: str = self._get_name_letters(sex)
        year: str = "%02d" % self.random_int(min=0, max=99)
        is_leap_year: bool = self.is_leap_year(int(year))
        month: str = self.random_element(MONTHS_LIST)
        max_day: int = self._get_max_day(is_leap_year=is_leap_year, month=month)
        day: str = "%02d" % (self.random_int(min=1, max=max_day) + (40 if sex == 1 else 0))
        municipality: str = self.random_element(MUNICIPALITIES_LIST)
        code: str = f"{surname}{name}{year}{month}{day}{municipality}"
        return code + checksum(code)

    vat_id_formats = ("IT###########",)

    def vat_id(self) -> str:
        """
        http://ec.europa.eu/taxation_customs/vies/faq.html#item_11
        :return: A random Italian VAT ID
        """
        return self.bothify(self.random_element(self.vat_id_formats))

    def _get_name_letters(self, sex: int) -> str:
        """
        Rules:
            * take all consonants in their order
              * if >= 4, take the 1st, 3rd and 4th
              * if < 3 take the vowels also; vowels must go _after_ the consonants
                and must be taken in the order they appear (LUCA -> LCU)
              * if == 3 return all 3 consonants
            * if name is < 3 chars, pad it on the right with "X" (LI -> LIX)
        Args:
            sex: int
        Returns:
            str
        """

        if sex == 1:
            name = self.generator.first_name_male().upper()
        else:
            name = self.generator.first_name_female().upper()

        name = self._transliterate_name(name)

        if len(name) < 3:
            return self._pad_shorter(name)

        name_consonants = self._get_consonants(name)
        cons_len = len(name_consonants)
        if cons_len >= 4:
            name_part = "".join([name_consonants[0], name_consonants[1], name_consonants[3]])
        elif cons_len < 3:
            name_part = "".join(name_consonants + self._get_vowels(name))[:3]
        else:
            name_part = "".join(name_consonants)
        return name_part

    def _get_surname_letters(self) -> str:
        """
            Rules:
            * if consonants >=3 : take the first 3
            * if less, pad them with vowels; vowels come after the consonants and in the order they appear (ROSA -> RSO)
            * if surname is less than 3 chars, pad it on the right with 'X'  (FO -> FOX)
        Returns:
            str
        """
        surname = self.generator.last_name().upper()
        surname = self._transliterate_name(surname)

        if len(surname) < 3:
            return self._pad_shorter(surname)

        surname_consonants = self._get_consonants(surname)
        cons_len = len(surname_consonants)

        if cons_len < 3:
            surname_part = "".join(surname_consonants + self._get_vowels(surname))[:3]
        else:
            surname_part = "".join(surname_consonants)[:3]
        return surname_part

    @staticmethod
    def _transliterate_name(name: str) -> str:
        nfkd_form: str = unicodedata.normalize("NFKD", name)
        return "".join([c for c in nfkd_form if unicodedata.combining(c) == 0])

    @staticmethod
    def _get_vowels(sequence: str) -> list:
        """
        Returns list of vowels in provided string
        """
        vowels = []
        for char in sequence:
            if char in VOWELS:
                vowels.append(char)
        return vowels

    @staticmethod
    def _get_consonants(sequence: str) -> list:
        """
        Returns list of consonants in provided string
        """
        consonants = []
        for char in sequence:
            if char in CONSONANTS:
                consonants.append(char)
        return consonants

    @staticmethod
    def _pad_shorter(sequence: str) -> str:
        """
        Pads shorter string with the allowed char
        """
        return sequence.ljust(3, "X")

    @staticmethod
    def is_leap_year(year: int) -> bool:
        """
        Checks if the one given is a leap year
        """
        if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
            return True
        return False

    @staticmethod
    def _get_max_day(is_leap_year: bool, month: str) -> int:
        """
        Returns the maximum day for the current month
        """
        if month in ["D", "H", "P", "S"]:
            max_day = 30
        elif month == "B":
            max_day = 29 if is_leap_year else 28
        else:
            max_day = 31
        return max_day
